是否可以使用Jenkins管道进行Git合并/推送

时间:2016-08-04 14:18:13

标签: git jenkins groovy bitbucket

我正在尝试使用Jenkinsfile创建Jenkins工作流程。我想要它做的就是监控“开发”。分支变化。当发生更改时,我希望它git tag并合并到master。我正在使用GitSCM Step,但它似乎唯一支持的是git clone。我不想出去做标签/合并,但我认为没办法解决。有谁知道这是否可能?我正在为我的Git服务器使用BitBucket(本地)。

10 个答案:

答案 0 :(得分:23)

目前无法实现,因为GitPublisher插件,以前负责标记/合并/推送自由式作业的插件尚未更新为与Jenkins管道兼容。您可以在pipeline plugins compatibility page和专用GitPublisher Jira issue上关注该问题。

所以看起来你唯一的选择就是实际发布你的标记/合并命令...但是,请注意,你仍然可以从一些Jenkins内置功能中受益,例如使用Git repo的凭据,这使得根据您的需求进行标记/合并非常简单。

退房示例:

git url: "ssh://jenkins@your-git-repo:12345/your-git-project.git",
    credentialsId: 'jenkins_ssh_key',
    branch: develop

然后标签/合并/推送将非常简单:

sh 'git tag -a tagName -m "Your tag comment"'
sh 'git merge develop'
sh 'git commit -am "Merged develop branch to master'
sh "git push origin master"

我希望有一天GitPublisher将在管道兼容版本中发布,但是现在这个解决方法应该这样做。

答案 1 :(得分:14)

答案 2 :(得分:5)

在我的情况下,我被迫使用HTTPS。我解决了它:

  1. 创建用户名/密码凭据 bitbucketUsernamePassword
  2. 使用该凭据结帐。
  3. 在结帐前设置凭证.helper。
  4. 执行 git checkout分支以获取本地分支跟踪远程。
  5. 然后我可以用 git push 来推送。

    像这样:

    sh 'git config --global credential.helper cache'
    sh 'git config --global push.default simple'
    
    checkout([
        $class: 'GitSCM',
        branches: [[name: branch]],
        extensions: [
            [$class: 'CloneOption', noTags: true, reference: '', shallow: true]
        ],
        submoduleCfg: [],
        userRemoteConfigs: [
            [ credentialsId: 'bitbucketUsernamePassword', url: cloneUrl]
        ]
    ])
    sh "git checkout ${branch}" //To get a local branch tracking remote
    

    然后我可以做以下事情:

    sh 'git push'
    

答案 3 :(得分:5)

是的,它是!! 经过几天的挣扎,我最终得到了这些简单的代码块,用于脚本管道脚本,对我有用。

withCredentials([sshUserPrivateKey(credentialsId: '<credential-id>', keyFileVariable: 'SSH_KEY')]) {
   sh("git push origin <local-branch>:<remote-branch>")
}

Enjoyy !!

答案 4 :(得分:2)

我必须执行类似的任务,并设法让它与其中的变体一起使用:https://issues.jenkins-ci.org/browse/JENKINS-28335?focusedCommentId=320383&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-320383

withCredentials([sshUserPrivateKey(credentialsId: 'ci', keyFileVariable: 'SSH_KEY')]) {
    sh 'echo ssh -i $SSH_KEY -l git -o StrictHostKeyChecking=no \\"\\$@\\" > local_ssh.sh'
    sh 'chmod +x local_ssh.sh'
    withEnv(['GIT_SSH=local_ssh.sh']) {
        sh 'git push origin develop'
    }
}

ci是您在Jenkins中设置的凭据的ID。 ssh密钥的路径可用作环境变量SSH_KEY

答案 5 :(得分:2)

该线程确实很有帮助。我的Jenkins凭据是用户名/密码,所以我使用了:

withCredentials([usernamePassword(credentialsId: 'fixed', usernameVariable: 'username', passwordVariable: 'password')]){
                {
                    sh("git push http://$username:$password@git.corp.mycompany.com/repo")
                }

用户名和密码在日志中均被遮盖:

+ git push http://****:****@git.corp.mycompany.com/repo

答案 6 :(得分:1)

与sshgent在蓝色的海洋上合作(使用https授权)

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

答案 7 :(得分:1)

借助基本的Jenkins和git功能找到了解决方案

    stage('Git Push'){
    steps{
        script{
            GIT_CREDS = credentials(<git creds id>)
            sh '''
                git add .
                git commit -m "push to git"
                git push https://${GIT_CREDS_USR}:${GIT_CREDS_PSW}@bitbucket.org/<your repo>.git <branch>
            '''
        }
    }
}

https://www.jenkins.io/doc/book/using/using-credentials/ Username and password in command for git push

答案 8 :(得分:0)

就我而言,我想通过SSH推送到CodeCommit存储库。 sshagent不起作用,因为它没有设置User。最终完成了这项工作:

withCredentials([sshUserPrivateKey(credentialsId: CODECOMMIT_CREDENTIALS_ID, keyFileVariable: 'SSH_KEY', usernameVariable: 'SSH_USER')]) {
    withEnv(["GIT_SSH_COMMAND=ssh -o StrictHostKeyChecking=no -o User=${SSH_USER} -i ${SSH_KEY}"]) {
        sh 'git push ${CODECOMMIT_URL} ${COMMIT_ID}:refs/heads/${BRANCH}'
    }
}

答案 9 :(得分:0)

小飞利浦(Litty Philips)的回答在很大程度上帮助了我,但我还需要定义GIT_SSH_COMMAND。

withCredentials([sshUserPrivateKey(credentialsId: '<credential-id>', keyFileVariable: 'SSH_KEY')]) {
   sh """
   GIT_SSH_COMMAND = "ssh -i $SSH_KEY"
   git push origin <local-branch>:<remote-branch>
   """
}