我尝试将CI流程从JobDSL迁移到多分支流水线设置。作为第一步,我决定让管道委托回到现有的工作(传递所需的参数)我的管道如下所示(伪代码)
stage('setup')
node('cotroller') {
...
}
stage('test') {
parallel {
'web' : {build job 'web-test' ..params...},
'API' : {build job 'api-test' ..params...}
}
}
stage('build') {
parallel {
'web' : {build job 'web-build' ..params...},
'API' : {build job 'api-build' ..params...}
}
}
stage('publish') {
node('controller'){
sh './gradlew publishArtifacts'
}
}
但是我在上次发布时遇到了问题&#39;阶段。当它启动gradle目标时,它正确地重新使用了“设置”中的工作区。阶段,但似乎执行在一个耐用的&#39;来自原始结帐的子文件夹(即设置阶段的过去在/mnt/jenkins/workspace/<branchname>/<random_hash>/
中执行,但是最后一个gradle目标在/mnt/jenkins/workspace/<branchname>/<random_hash>@tmp/durable-<hash>/script.sh
等文件夹中执行)这导致找不到gradlew错误
我尝试过使用目录(&#39; /... 39;){...},但似乎没有解决问题......任何帮助或指导都会非常感谢!
答案 0 :(得分:1)
您可以尝试从setup
阶段保存工作目录,例如:
stage('setup')
node('cotroller') {
def setupPath = pwd()
...
}
stage('test') {
parallel {
'web' : {build job 'web-test' ..params...},
'API' : {build job 'api-test' ..params...}
}
}
stage('build') {
parallel {
'web' : {build job 'web-build' ..params...},
'API' : {build job 'api-build' ..params...}
}
}
stage('publish') {
node('controller'){
dir("${setupPath}") {
sh './gradlew publishArtifacts'
}
}
}
根据Jenkins pipeliens tutorial,推荐的方法是在Jenkin的Global Tool configuration
中配置Gradle安装路径,将其命名为任何内容(例如&#34; Gradle
&# 34;)然后在你的管道中使用它:
...
stage('publish') {
node('controller'){
def gradleHome = tool 'Gradle'
sh "${gradleHome}/bin/gradlew publishArtifacts'
}
}
答案 1 :(得分:0)
groovy语法对我不起作用。不得不改为:
stage('test') {
parallel (
'web' : {build 'web-test' ..params...},
'API' : {build 'api-test' ..params...}
)
}