How do I tag the current git changeset from inside the Jenkinsfile? How do I tag the current git changeset from inside the Jenkinsfile? jenkins jenkins

How do I tag the current git changeset from inside the Jenkinsfile?


Here is the way I was able to implement this this way, but if you know a better way I am more than willing to hear it.

#!groovystage 'build'node {    repositoryCommiterEmail = 'ci@example.com'    repositoryCommiterUsername = 'examle.com'    checkout scm    sh "echo done"    if (env.BRANCH_NAME == 'master') {        stage 'tagging'        sh("git config user.email ${repositoryCommiterEmail}")        sh("git config user.name '${repositoryCommiterUsername}'")        sh "git remote set-url origin git@github.com:..."        // deletes current snapshot tag        sh "git tag -d snapshot || true"        // tags current changeset        sh "git tag -a snapshot -m \"passed CI\""        // deletes tag on remote in order not to fail pushing the new one        sh "git push origin :refs/tags/snapshot"        // pushes the tags        sh "git push --tags"    }}


I want to share my Jenkins Pipeline Setup and my solution to publish changes/tags to git repo via SSH (While Git Publish Support is under development). Please check it out for more info, any improvement ideas are welcome.

In short you just add file git_push_ssh.groovy to your project and call method pushSSH() from Jenkinsfile like this:

env.BRANCH_NAME = "mycoolbranch"// BRANCH_NAME is predefined in multibranch pipeline jobenv.J_GIT_CONFIG = "true"env.J_USERNAME = "Jenkins CI"env.J_EMAIL = "jenkins-ci@example.com"env.J_CREDS_IDS = '02aa92ec-593e-4a90-ac85-3f43a06cfae3' // Use credentials id from Jenkinsdef gitLib = load "git_push_ssh.groovy"...gitLib.pushSSH(commitMsg: "Jenkins build #${env.BUILD_NUMBER}", tagName: "build-${env.BUILD_NUMBER}", files: "changelog.txt someotherfile.txt");


For people that couldn't get the above working I used the sshagent plugin directly, which did the trick:

stage('tag build'){checkout([    $class: 'GitSCM', branches: [[name: '*/master']],    userRemoteConfigs: [[credentialsId: 'git',    url: 'ssh://<ssh URL>']],    extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'targeted-dir']]])sshagent(credentials: ['<credentials ID.']){  dir('targeted-dir'){    sh("git config user.email '<email>")    sh("git config user.name '<user>.com'")    // deletes current snapshot tag    sh ("git tag -d ${PARAM_VERSION_NUMBER} || true")    // tags current changeset    sh ("git tag -a ${PARAM_VERSION_NUMBER} -m \"versioning ${PARAM_VERSION_NUMBER}\"")    // deletes tag on remote in order not to fail pushing the new one    sh ("git push origin :refs/tags/snapshot")    // pushes the tags    sh ("git push --tags")    }}

}