ビルドストリームのさらに下のgitからリポジトリをチェックアウトしたときに、GIT_COMMIT
やGIT_BRANCH
などのgit変数にアクセスしたいと思います。現在、これら2つのパラメーターにアクセスするための使用可能な変数はありません。
node {
git git+ssh://git.com/myproject.git
echo "$GIT_COMMIT - $BRANCH_NAME"
}
そのような変数は利用可能ですか?また、場合によってはどこで見つけられますかそれらがいくつかのグルーヴィーな変数を通して利用可能かどうか、どこにいても、私はそれらにアクセスできることを気にしません。
おそらく、Groovyのデバッグスキルが不足しており、これは簡単に見つけることができますが、限られたスキルでは見つけることができません。
今のところこれを修正する良い方法は、マルチブランチパイプラインを使用することです。BitbucketとGithubがJenkinsにプラグインがあり、組織をセットアップして新しいプロジェクトを自動検出することを知っておくとよいでしょう。これはenv.GIT_BRANCHでネイティブに機能します
コミットIDについては、上記の@mkobitの内容をお勧めします。
使用しているSCMプラグインによっては、checkout
ステップがリビジョンに関する追加情報を返す場合があります。これは JENKINS-261 で解決されました。 2.6のworkflow-scm-step
プラグイン 。
たとえば、Gitプラグインを使用すると、次のようなことができます。
final scmVars = checkout(scm)
echo "scmVars: ${scmVars}"
echo "scmVars.GIT_COMMIT: ${scmVars.GIT_COMMIT}"
echo "scmVars.GIT_BRANCH: ${scmVars.GIT_BRANCH}
これは、使用するプラグインによって異なりますので、元の回答がより適切に機能する場合があります。
元の回答
Pipeline Nodes and Processes Plugin の2.4リリースでは、次のことが簡単にできます。
def gitCommit = sh(returnStdout: true, script: 'git rev-parse HEAD').trim()
これは、 Jenkinsのサンプルリポジトリで提供されている例 に基づいて、私がやっていることです:
node {
git url: 'https://git.com/myproject.git'
sh 'git rev-parse --abbrev-ref HEAD > GIT_BRANCH'
git_branch = readFile('GIT_BRANCH').trim()
echo git_branch
sh 'git rev-parse HEAD > GIT_COMMIT'
git_commit = readFile('GIT_COMMIT').trim()
echo git_commit
}
Editを介してこれを短くすることができます
git_commit = sh(returnStdout: true, script: "git rev-parse HEAD").trim()
必要な情報に応じて、非常に簡単な解決策があります。「checkout scm」操作を返します。GIT_BRANCH、GIT_COMMIT、GIT_PREVIOUS_COMMIT、GIT_PREVIOUS_SUCCESSFUL_COMMIT、およびGIT_URLを提供します。
node {
stage ("Checkout") {
scmInfo = checkout scm
/*...*/
echo "scm : ${scmInfo}"
echo "${scmInfo.GIT_COMMIT}"
}
}
これは出力します:
...
[Pipeline] echo
scm : [GIT_BRANCH:my-branch, GIT_COMMIT:0123456789abcdefabcdef0123456789abcdef01, GIT_PREVIOUS_COMMIT:aaaabbbcccdddeeeefffe0123456789012345678, GIT_PREVIOUS_SUCCESSFUL_COMMIT:aaaabbbcccdddeeeefffe0123456789012345678, GIT_URL:http://my.si.te/my-repository.git]
[Pipeline] echo
0123456789abcdefabcdef0123456789abcdef01
...
詳細はこちら Jenkins Pipeline SCM Steps
キューで実行するために、node
内でジョブ(最後のコミットからgit情報を抽出)を定義できます。
node {
//Code checkout from SCM (here - `git`)
checkout scm
stage("GIT INFO"){
echo ":::::::::::GIT_SHORT_COMMIT::::::::::::::::::::::::"
GIT_SHORT_COMMIT = sh(returnStdout: true, script: "git log -n 1 --pretty=format:'%h'").trim()
//echo in jenkins console
echo GIT_SHORT_COMMIT
//wanted to send these info to build artifacts, append to any file
sh("echo ${GIT_SHORT_COMMIT} > GIT_SHORT_COMMIT")
//Similar proceed for other git info's
echo ":::::::::::GIT_COMMITTER_EMAIL::::::::::::::::::::::::"
GIT_COMMITTER_EMAIL = sh(returnStdout: true, script: "git show -s --pretty=%ae").trim()
sh("echo ${GIT_COMMITTER_EMAIL} > GIT_COMMITTER_EMAIL-${GIT_COMMITTER_EMAIL}")
echo ":::::::::::GIT_COMMITTER_NAME::::::::::::::::::::::::"
GIT_COMMITTER_NAME = sh(returnStdout: true, script: "git show -s --pretty=%an").trim()
sh("echo ${GIT_COMMITTER_NAME} > GIT_COMMITTER_NAME-${GIT_COMMITTER_NAME}")
}
ジョブが終了すると、ワークスペースに上記のタスクからの3つの追加ファイルが表示されます。
. |-- [email protected] |-- GIT_COMMITTER_NAME-username |-- GIT_SHORT_COMMIT_<commit-short-ID-ef9e91c>
この例ではさらに詳しく説明します。 https://github.com/jenkinsci/pipeline-examples/tree/master/pipeline-examples/gitcommit
この例では、gitコマンドの出力をファイルにパイプし、ファイルを読み取ります。
Jenkinsfileを介してJenkinsでGit変数を取得する最も簡単な方法
node {
def scmVars = checkout scm
echo 'scm : the commit id is ' +scmVars.GIT_COMMIT
echo 'scm : the commit branch is ' +scmVars.GIT_BRANCH
echo 'scm : the previous commit id is ' +scmVars.GIT_PREVIOUS_COMMIT
def commitEmail = sh(returnStdout: true, script: "git --no-pager show -sformat=\'%ae\'")
echo " the commiter email is'${commitEmail}'"
def commitName = sh(returnStdout: true, script: "git --no-pager show -s format=\'%an\'")
echo " the commiter name is'${commitName}'"
}
コンソールでは、
GIT_COMMIT:
GIT_BRANCH:
GIT_PREVIOUS_COMMIT:
commitEmail:
commitName: