我有一个带有分支参数的Jenkins作业,设置为每5分钟轮询一次SCM,然后从SCM运行管道脚本:
脚本执行的第一件事是删除先前的工作空间并获得源代码的新副本:
#!/usr/bin/env groovy
node {
try {
stage('Get Source') {
// Clear the workspace
deleteDir()
// Get the source code
checkout scm
}
// Stages for building and running unit tests...
}
}
根据Git轮询日志,它每5分钟检查一次存储库,但未发现任何更改:
Started on Mar 13, 2019 4:29:34 PM
Using strategy: Default
[poll] Last Built Revision: Revision 47251333f2d6c740275f24dd667255e66f7b5665 (refs/remotes/origin/master)
using credential **********
> git --version # timeout=10
using GIT_SSH to set credentials Jenkins SSH Authentication Key
> git ls-remote -h git@bitbucket.org:myuser/myrepo.git # timeout=10
Found 1 remote heads on git@bitbucket.org:myuser/myrepo.git
Using strategy: Default
[poll] Last Built Revision: Revision 47251333f2d6c740275f24dd667255e66f7b5665 (refs/remotes/origin/master)
using credential **********
> git --version # timeout=10
using GIT_SSH to set credentials Jenkins SSH Authentication Key
> git ls-remote -h git@bitbucket.org:myuser/myrepo.git # timeout=10
Found 1 remote heads on git@bitbucket.org:myuser/myrepo.git
Done. Took 1.8 sec
No changes
但是,在47251333f2d6c740275f24dd667255e66f7b5665之后,还有一些其他提交已被推送到远程主分支。
我读到here,该作业必须手动运行一次才能开始SCM轮询,但是我已经手动运行了几次。我在做什么错了?
答案 0 :(得分:1)
我想我已经解决了问题。因为我的管道脚本配置中的分支说明符是*/${BRANCH}
,所以我必须在结帐步骤中指定它:
#!/usr/bin/env groovy
node {
try {
def repo = 'dice-seeker-android'
def branch = params.Branch
def credentialsID = params.CredentialsID
stage('Get Source') {
// Clear the workspace
deleteDir()
// Get the source code
checkout([
$class: 'GitSCM',
branches: [[
name: '*/' + branch
]],
extensions: [[
$class: 'RelativeTargetDirectory',
relativeTargetDir: repo
]],
userRemoteConfigs: [[
credentialsId: credentialsID,
url: 'git@bitbucket.org:myuser/' + repo + '.git'
]]
])
}
// Stages for building and running unit tests...
}
}
这意味着我还必须包括使用我的SSH密钥的凭据参数。
最后,我不得不手动运行一次作业。现在似乎正在接受更改。
如果有人有更好的解决方案,需要更少的代码,那么我仍然会对听到它感兴趣。
答案 1 :(得分:0)
脚本的第一步是删除工作区并获取更新的工作区(包含所有新提交),所以我想它已经更新了。这就是为什么它不检测您的提交的原因。