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

前端 未结 4 764
时光取名叫无心
时光取名叫无心 2020-12-30 09:09

I want to tag the current git changeset and push the tag from inside the Jenkinsfile. If the tag already exists it must be replaced.

I want to use this logic in orde

相关标签:
4条回答
  • 2020-12-30 09:49

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

    }

    0 讨论(0)
  • 2020-12-30 09:49

    To get this working for blue ocean (which uses https connection) use the following:

    sshagent(credentials: ["406ef572-9598-45ee-8d39-9c9a227a9227"]) {
                    def repository = "git@" + env.GIT_URL.replaceFirst(".+://", "").replaceFirst("/", ":")
                    sh("git remote set-url origin $repository")
                    sh("git tag --force build-${env.BRANCH_NAME}")
                    sh("git push --force origin build-${env.BRANCH_NAME}")
                }
    
    0 讨论(0)
  • 2020-12-30 09:54

    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.

    #!groovy
    
    stage '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"
        }
    }
    
    0 讨论(0)
  • 2020-12-30 09:56

    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 job
    env.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 Jenkins
    def gitLib = load "git_push_ssh.groovy"
    ...
    gitLib.pushSSH(commitMsg: "Jenkins build #${env.BUILD_NUMBER}", tagName: "build-${env.BUILD_NUMBER}", files: "changelog.txt someotherfile.txt");
    
    0 讨论(0)
提交回复
热议问题