我在 BitBucket 上有两个分支:master
和 develop
。我还在我的 Jenkins 服务器上配置了一个 BitBucket 团队文件夹作业来构建该代码库。在 develop
分支上有以下的 Jenkinsfile:
node {
stage('Checkout') {
checkout scm
}
stage('Try different branch') {
sh "git branch -r"
sh "git checkout master"
}
}
当Jenkins运行时,当它尝试检出master
时,构建失败:
[Pipeline] stage
[Pipeline] { (Try different branch)
[Pipeline] sh
[e_jenkinsfile-tests_develop-4R65E2H6B73J3LB52BLACQOZLBJGN2QG22IPONX3CV46B764LAXA] Running shell script
+ git branch -r
origin/develop
[Pipeline] sh
[e_jenkinsfile-tests_develop-4R65E2H6B73J3LB52BLACQOZLBJGN2QG22IPONX3CV46B764LAXA] Running shell script
+ git checkout master
error: pathspec 'master' did not match any file(s) known to git.
[Pipeline] }
我原本预期git branch -r
命令将打印出origin/master
和origin/develop
,但出于某些原因它只打印了后者。
我查阅了一些资料并尝试了各种方法,例如我尝试安装Jenkins的SSH Agent插件并更改了Jenkinsfile:
node {
stage('Checkout') {
checkout scm
}
stage('Try different branch') {
sshagent(['Bitbucket']) {
sh "git branch -r"
sh "git checkout master"
}
}
}
但它仍然似乎找不到origin/master
。 更糟糕的是,在尝试检出master
之前,SSH代理似乎已经被杀死:
[Pipeline] { (Try different branch)
[Pipeline] sshagent
[ssh-agent] Using credentials ThomasKasene (Used to communicate with Bitbucket)
[ssh-agent] Looking for ssh-agent implementation...
[ssh-agent] Exec ssh-agent (binary ssh-agent on a remote machine)
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-M6pIguCUpAV4/agent.11899
SSH_AGENT_PID=11902
$ ssh-add /var/jenkins_home/workspace/e_jenkinsfile-tests_develop-4R65E2H6B73J3LB52BLACQOZLBJGN2QG22IPONX3CV46B764LAXA@tmp/private_key_2394129657382526146.key
Identity added: /var/jenkins_home/workspace/e_jenkinsfile-tests_develop-4R65E2H6B73J3LB52BLACQOZLBJGN2QG22IPONX3CV46B764LAXA@tmp/private_key_2394129657382526146.key (/var/jenkins_home/workspace/e_jenkinsfile-tests_develop-4R65E2H6B73J3LB52BLACQOZLBJGN2QG22IPONX3CV46B764LAXA@tmp/private_key_2394129657382526146.key)
[ssh-agent] Started.
[Pipeline] {
[Pipeline] sh
[e_jenkinsfile-tests_develop-4R65E2H6B73J3LB52BLACQOZLBJGN2QG22IPONX3CV46B764LAXA] Running shell script
+ git branch -r
origin/develop
[Pipeline] sh
$ ssh-agent -k
unset SSH_AUTH_SOCK;
unset SSH_AGENT_PID;
echo Agent pid 11902 killed;
[ssh-agent] Stopped.
[e_jenkinsfile-tests_develop-4R65E2H6B73J3LB52BLACQOZLBJGN2QG22IPONX3CV46B764LAXA] Running shell script
+ git checkout master
error: pathspec 'master' did not match any file(s) known to git.
[Pipeline] }
我的最终计划是向 develop
提交一些内容,然后将其合并到 master
,但迄今为止我没有太大的运气。有人有可能的解决方案或解决方法吗?
PS:这只是在 Jenkinsfile 中似乎存在问题;我有一个自由样式工作任务与我想要的类似,它可以正常工作。
git checkout -b develop 1694b133.....
这就是为什么它在管道中没有额外的手动步骤时无法跟踪远程分支的原因。上面的最后一个参数(提交)是“start_point”,如果设置为分支名称,则git将自动跟踪远程,而不是提交sha。我不知道为什么git插件会这样做,但是除非您持久化本地工作区,否则将检出到附加的HEAD进行构建而不跟踪远程是相当无用的。我还没有找到解决方案。 - Jon