Git Variables dans Jenkins Flux de travail plugin

j'aimerais accéder à des variables de Git comme GIT_COMMIT et GIT_BRANCH lorsque j'ai vérifié un dépôt de Git plus loin dans le flux de compilation. Actuellement, Je ne trouve Aucune variable disponible pour accéder à ces deux paramètres.

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

est de telles variables disponibles et dans le cas, où je les trouverais. Cela ne me dérange pas si elles sont disponibles à travers quelques variables groovy ou n'importe où, juste que je peux y accéder.

peut-être que je manque le les compétences de débogage en Groovy, et c'est facile à trouver, mais je ne peux pas le trouver avec mes compétences limitées.

29
demandé sur gunr2171 2016-02-22 16:30:39
la source

7 ответов

selon le plugin SCM que vous utilisez, l'étape checkout peut retourner des informations supplémentaires sur la révision. Cela a été résolu dans JENKINS-26100 . Il a été publié dans la version 2.6 de la workflow-scm-step plugin .

par exemple, en utilisant le plugin Git, vous pouvez faire quelque chose comme:

final scmVars = checkout(scm)
echo "scmVars: ${scmVars}"
echo "scmVars.GIT_COMMIT: ${scmVars.GIT_COMMIT}"
echo "scmVars.GIT_BRANCH: ${scmVars.GIT_BRANCH}

cela va varier en fonction du plugin que vous utilisez, donc la réponse originale peut fonctionner le mieux pour vous.


Réponse Originale

avec la version 2.4 du les noeuds de Pipeline et le Plugin de processus , vous pouvez simplement faire:

def gitCommit = sh(returnStdout: true, script: 'git rev-parse HEAD').trim()
23
répondu mkobit 2017-12-11 19:44:10
la source

C'est ce que je fais, basé sur l'exemple fourni dans le Jenkins examples repo :

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
}
9
répondu Kevin London 2016-06-16 12:36:34
la source

cet exemple pourrait vous faire avancer: https://github.com/jenkinsci/pipeline-examples/tree/master/pipeline-examples/gitcommit

dans cet exemple, ils acheminent la sortie des commandes git vers un fichier, puis lisent le fichier.

1
répondu BritishKnight 2016-03-01 01:04:21
la source

vous pouvez définir vos travaux (extraire des informations git de la dernière propagation) dans node pour l'exécution dans une file d'attente.

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}")
  }

une fois votre travail terminé, vous verrez trois fichiers supplémentaires de la tâche ci-dessus dans votre espace de travail :

. |-- [email protected] |-- GIT_COMMITTER_NAME-username |-- GIT_SHORT_COMMIT_<commit-short-ID-ef9e91c>

1
répondu daemonsl 2017-10-03 16:17:48
la source

en fonction des informations dont vous avez besoin, il existe une solution très simple: récupérez l'opération "checkout scm" return: elle fournit GIT_BRANCH, GIT_COMMIT, GIT_PREVIOUS_COMMIT, GIT_PREVIOUS_SFUL_COMMIT et GIT_URL.

node { 
    stage ("Checkout") {

        scmInfo = checkout scm

        /*...*/
        echo "scm : ${scmInfo}"
        echo "${scmInfo.GIT_COMMIT}"


    }
}

cette sortie:

...
[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
...

plus de détails ici Jenkins Pipeline SCM Steps

1
répondu Jonathan Vanderick 2017-10-11 11:55:26
la source

j'ai bon moyen de résoudre ce problème pour l'instant est d'utiliser le Multi-direction de la canalisation, et il pourrait être bon de savoir que Bitbucket et Github plugins dans Jenkins, qui met en place une organisation et autodiscovers de nouveaux projets. Cela fonctionne nativement alors avec env.GIT_BRANCH

pour commit ID je suggérerais ce que @mkobit a écrit ci-dessus.

0
répondu Oldek 2016-11-17 11:47:19
la source

la façon la plus simple de récupérer la variable Git dans Jenkins à travers Jenkinsfile

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}'"
}

en console vous obtiendrez le

GIT_COMMIT:
GIT_BRANCH:
GIT_PREVIOUS_COMMIT:
commitEmail:
commitName:
0
répondu pix data 2018-09-06 07:39:15
la source

Autres questions sur