Jenkins Workflow Checkoutステップから$ GIT_COMMITと$ BRANCH_NAMEを抽出できないようです。
この情報をGradleスクリプトに送信して、静的分析などの外部ソースに渡すことができるようにしたいと思います。
現在、私はこれを実行しようとしています:
checkout([$class: 'GitSCM', branches: [[name: '*/master']], userRemoteConfigs: [[credentialsId: '2b74a351-67d5-4d00-abd3-49842a984201', url: 'ssh://[email protected]:repo.git']]])
そして、私は次のような何かを達成したいと思います:
// Specified variables that can be reused
def branch = ${BRANCH_NAME}
def commit = ${GIT_COMMIT}
または、これもうまくいくかもしれません:
print "BRANCH: ${BRANCH_NAME}, COMMIT: ${GIT_COMMIT}"
// or the following
print "BRANCH: ${env.BRANCH_NAME}, COMMIT: ${env.GIT_COMMIT}"
次の問題は解決されたようですが、バージョン1.15では機能しません。
https://issues.jenkins-ci.org/browse/JENKINS-30252
誰もこれを回避する方法や、私が見つけることができない変数がある場合、何かアイデアを持っていますか?
まず第一に、
def branch = ${BRANCH_NAME}
有効なGroovyではない、または少なくともあなたが思うことをしていない。もしかして
def branch = "${BRANCH_NAME}"
これはばかげた書き方です
def branch = BRANCH_NAME
とにかく、現在、環境変数はPipelineのGroovy変数として直接アクセスできません(それを許可する提案があります)。 env
グローバル変数を使用する必要があります。
def branch = env.BRANCH_NAME
sh
ステップなどの外部プロセス内からは、実際の環境変数なので、
sh 'echo $BRANCH_NAME'
動作します('
は、Groovyがnot変数を補間することを意味します。
現在、JENKINS-30252はマルチブランチプロジェクトを指していました。スタンドアロンPipelineジョブを作成した場合、この変数は設定されません。
とにかくあなたの場合、checkout
ステップは常にmaster
ブランチをチェックアウトしています。実際にマルチブランチプロジェクトがある場合は、Jenkinsfile
を使用する必要があります
checkout scm
これにより、正しいブランチでコミットがチェックアウトされます(常にJenkinsfile
自体のリビジョンに一致します)。
コミットハッシュに関しては、保留中 JENKINS-261 これは自動的には使用できませんが、次のようなものを使用できます
sh 'git rev-parse HEAD > commit'
def commit = readFile('commit').trim()
アクセスします。
2つのJenkinsインスタンスがあります。
両方のインスタンスで、_GIT_COMMIT
_および_BRANCH_NAME
_環境変数は定義されていません。
checkout()
呼び出しの戻り値からそれらを取得しようとすると、各インスタンスの動作が異なります。
Jenkinsバージョン:2.46.1
「パイプライン:SCMステップ」プラグインバージョン:2.5
checkout
documentation で説明されているように環境変数にアクセスしようとすると失敗します。
_def scmVars = checkout([$class: 'GitSCM', branches: [[name: '*/master']],
userRemoteConfigs: [[credentialsId: '2b74a351-67d5-4d00-abd3-
49842a984201', url: 'ssh://[email protected]:repo.git']]])
def commitHash = scmVars.GIT_COMMIT
_
scmVars
はNULLを返し、_scmVars.GIT_BRANCH
_へのアクセスは例外_Java.lang.NullPointerException: Cannot get property 'GIT_BRANCH' on null object
_で失敗します。
そのため、ブランチを取得するために以下を実行する必要がありました。
_sh 'git name-rev --name-only HEAD > GIT_BRANCH'
sh 'cat GIT_BRANCH'
git_branch = readFile('GIT_BRANCH').trim()
env.GIT_BRANCH = git_branch
_
Jenkinsバージョン:2.60.2
「パイプライン:SCMステップ」プラグインバージョン:2.6
この場合、次のことを成功させることができます。
_def scmVars = checkout([$class: 'GitSCM', branches: [[name: '*/master']],
userRemoteConfigs: [[credentialsId: '2b74a351-67d5-4d00-abd3-
49842a984201', url: 'ssh://[email protected]:repo.git']]])
env.GIT_COMMIT = scmVars.GIT_COMMIT
env.GIT_BRANCH = scmVars.GIT_BRANCH
_
したがって、Jenkinsインスタンスでどのアプローチが機能するかを確認して使用してください。
Jenkins環境変数からBRANCH_NAME
にシェルスクリプトとしてアクセスする場合は、以下のスニペットを使用します。
sh 'echo Branch Name: $BRANCH_NAME'
応答は次のようになります。
Branch Name: the_checkedout_branch