gpt4 book ai didi

Jenkins Copy Artifact 无法找到文件夹/multiProjectPipeline/branchWithSlash

转载 作者:行者123 更新时间:2023-12-02 18:28:46 25 4
gpt4 key购买 nike

我在 Windows Server 2016 上有 Jenkins LTS 2.60.2 并使用这些插件:

  • 文件夹插件 (6.1.0)
  • Copy Artifact插件(1.38.1)
  • 管道插件 (2.5) + 所有依赖的管道子插件
  • 各种其他依赖插件...

参见Pipeline to use artifacts from 2 projects associated by the same git branch name有关我的设置的更多详细信息,但总而言之,我有以下项目:

  • playground(使用文件夹插件创建的文件夹,用于对以下所有项目进行分组)
  • 前端(多分支管道)
  • 后端(多分支管道)
  • 配置(带有名为 BRANCH_NAME 的参数的管道)

前端和后端git repos,都有一个名为ma​​ster的分支和一个名为release/2017.2的分支。

这个想法是在每次成功构建后自动调用configure管道,并传递git分支名称。自动触发配置管道工作。

什么不起作用,我需要您的帮助来修复,是配置管道中从多分支管道/特定分支复制工件的步骤。

如果 BRANCH_NAME 参数(或上游管道)是master,则它可以工作。如果 BRANCH_NAME 是:release/2017.2,我收到此错误:

ERROR: Unable to find project for artifact copy: playground/frontend/release%2f2017.2 This may be due to incorrect project name or permission settings; see help for project name in job configuration. Finished: FAILURE

配置管道如下所示:

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(这是必需的)。

如果我不使用“playground”文件夹(我的所有管道按原样,不在文件夹项内),它就可以工作。如果我使用该文件夹并使用主分支,它就可以工作。如果我使用文件夹和分支名称(例如 2017.2),它不起作用。我究竟做错了什么?你能帮忙让它发挥作用吗?当然,如果这是复制工件插件中的一个错误(我在 https://issues.jenkins-ci.org 中搜索并发现了一些错误,其中类似的文件夹设置不起作用,但它们已被修复......所以我真的想知道......),请提交错误并在此处分享链接,以便我们都可以监控其进度...

谢谢。

最佳答案

终于找到问题了。 配置管道无法找到带有斜杠的分支,因为编码不正确。

所以,在我的问题中,在配置管道中:

此操作(将 / 替换为 %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

更新:实际上,我进一步调查了一点,并在 step 之前添加了 echo "${projectname}",以及上一个和修复了项目名称,我注意到差异是 %2f 小写

大写,如下所示:%2F 有效:

def projectname = "playground/frontend/" + "${BRANCH_NAME}".replace("/", "%2F")

因此,固定的配置管道如下所示(我保留了替换功能,这对于我的情况来说已经足够了):

node {
stage('Prepare') {
def projectname = "playground/frontend/" + "${BRANCH_NAME}".replace("/", "%2F")
step([$class: 'CopyArtifact', projectName: "${projectname}", selector: [$class: 'StatusBuildSelector', stable: false]])
}
stage('Archive') {
archiveArtifacts '**'
}
}

关于Jenkins Copy Artifact 无法找到文件夹/multiProjectPipeline/branchWithSlash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45377411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com