web-dev-qa-db-ja.com

Jenkins WorkflowプラグインのGit変数

ビルドストリームのさらに下のgitからリポジトリをチェックアウトしたときに、GIT_COMMITGIT_BRANCHなどのgit変数にアクセスしたいと思います。現在、これら2つのパラメーターにアクセスするための使用可能な変数はありません。

node {
    git git+ssh://git.com/myproject.git
    echo "$GIT_COMMIT - $BRANCH_NAME"
}

そのような変数は利用可能ですか?また、場合によってはどこで見つけられますかそれらがいくつかのグルーヴィーな変数を通して利用可能かどうか、どこにいても、私はそれらにアクセスできることを気にしません。

おそらく、Groovyのデバッグスキルが不足しており、これは簡単に見つけることができますが、限られたスキルでは見つけることができません。

36
Oldek

今のところこれを修正する良い方法は、マルチブランチパイプラインを使用することです。BitbucketとGithubがJenkinsにプラグインがあり、組織をセットアップして新しいプロジェクトを自動検出することを知っておくとよいでしょう。これはenv.GIT_BRANCHでネイティブに機能します

コミットIDについては、上記の@mkobitの内容をお勧めします。

0
Oldek

使用している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()
30
mkobit

これは、 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()
8
Kevin London

必要な情報に応じて、非常に簡単な解決策があります。「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

6

キューで実行するために、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>

1
daemonsl

この例ではさらに詳しく説明します。 https://github.com/jenkinsci/pipeline-examples/tree/master/pipeline-examples/gitcommit

この例では、gitコマンドの出力をファイルにパイプし、ファイルを読み取ります。

1
BritishKnight

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:
0
pix data