我在Windows Server 2016上安装了Jenkins LTS 2.60.2并使用这些插件:
有关我的设置的详细信息,请参阅Pipeline to use artifacts from 2 projects associated by the same git branch name,但总结一下,我有这些项目:
前端和后端 git repos ,都有一个名为 master 的分支和一个名为 release / 2017.2 的分支。
我们的想法是在每次成功构建后自动调用 configure 管道,并传递git分支名称。自动触发 configure 管道。
什么不起作用,我需要你的帮助才能修复, configure 管道中的步骤是从multibranchPipeline / specificBranch复制工件。
如果BRANCH_NAME参数(或上游管道)是 master ,则可以正常工作。如果BRANCH_NAME是:发布/ 2017.2 ,我收到此错误:
错误:无法找到工件副本的项目: playground / frontend / release%2f2017.2这可能是因为项目不正确 名称或权限设置;在工作中查看项目名称的帮助 组态。完成:失败
配置管道如下所示:
node {
stage('Prepare') {
def projectname = "playground/frontend/" + "${BRANCH_NAME}".replace("/", "%2f")
step([$class: 'CopyArtifact', projectName: "${projectname}", selector: [$class: 'StatusBuildSelector', stable: false]])
}
stage('Archive') {
archiveArtifacts '**'
}
}
如您所见,我已经用%2f替换/(需要它)。
如果我不使用"操场"文件夹(我的所有管道都是,不在文件夹项目内),它的工作原理。如果我使用该文件夹并使用主分支,它的工作原理。如果我使用像2017.2这样的文件夹和分支名称,它不起作用。我究竟做错了什么?你能帮忙搞定吗?好吧,如果它是一个错误(我在https://issues.jenkins-ci.org搜索并发现一些错误,其中与文件夹类似的设置不起作用,但它们已被修复...所以我真的很想...... )在复制工件插件中,请提交错误并在此处分享链接,以便我们全部监控其进度......
谢谢。
答案 0 :(得分:3)
我终于找到了这个问题。由于编码不正确, configure 管道无法找到带斜杠的分支。
所以,在我的问题中,在 configure 管道中:
这个(将/
替换为%2f
)错误并生成错误:
def projectname = "playground/frontend/" + "${BRANCH_NAME}".replace("/", "%2f")
这是对斜杠进行编码的正确方法,正常工作:
def projectname = "playground/frontend/" + URLEncoder.encode("${BRANCH_NAME}", "UTF-8").replace("+", "%20")
致记:http://www.pipegrep.se/copy-artifacts-from-jenkins-pipeline-jobs.html
更新:实际上,我进一步调查并在echo "${projectname}"
之前添加step
,使用之前和已修复的项目名称,我注意到差异为{{ 1}} 小写。
大写,如下所示:%2f
有效:
%2F
因此,修复的 configure 管道看起来像这样(我保留了我的替换功能,这对我来说已经足够了):
def projectname = "playground/frontend/" + "${BRANCH_NAME}".replace("/", "%2F")
答案 1 :(得分:0)
我创建了一个sample project来尝试重新创建你所看到的内容,而且我能够以一种时尚的方式这样做,除了我遇到麻烦的构建版本是master
而不是release/2017.2
。最后,我意识到我在build job
项目中错误地执行了frontend
,并且它给了我与您相同的错误,因为我还没有完成{{{}的成功构建1}} branch(我已经完成了frontend/master
分支的成功构建,因为我最初没有触发release/2017.2
构建,所以它没有给我同样的错误一旦我配置它以触发configure
构建)。
将configure
build job
中的frontend
更改为此内容有效:
Jenkinsfile
添加build job: 'playground/configure', parameters: [[$class: 'StringParameterValue', name: 'BRANCH_NAME', value: env.BRANCH_NAME]], quietPeriod: 2, wait: false
会在完成上一份工作之间留出几秒钟的安静时间(我不确定这是否至关重要,但似乎它可能是一个很好的故障保护,对于尝试并确保有足够的时间来完成构建),但重要的部分是quietPeriod
,它指示Jenkins这个构建不应该等待触发的构建完成。更改后,wait: false
分支成功完成,并且触发的frontend/master
版本也成功完成。
希望这会有所帮助。我能够让我的configure
和master
分支机构正确构建,因此我不相信项目名称中release/2017.2
存在任何内在问题。您可以在引用的repo中看到我的简单/
,并且我使用了与您在问题中发布的相同的管道脚本。