【问题标题】:Jenkins: How to start, in a Jenkinsfile, a multibranch job inside a Bitbucket folder?Jenkins:如何在 Jenkinsfile 中启动 Bitbucket 文件夹中的多分支作业?
【发布时间】:2020-09-01 15:33:22
【问题描述】:

在 Jenkinsfile 中,要从另一个作业开始参数化管道作业,我有以下代码 sn-p:

build job: 'build-sharpen-branch', parameters: [
        [$class: 'StringParameterValue', name: 'BRANCHNAME', value: mergeBranchname]
]

这已经按预期工作,它将在 URL https://$JENKINS_URL/job/build-sharpen-branch/ 处开始工作。

现在我想开始一份工作,即 Bitbucket 文件夹中多分支项目的一个分支。作业的 URL 是https://$JENKINS_URL/job/iText%207%20.NET/job/sharpen/job/feature%2FQA-10738/

  • iText%207%20.NET 是 Bitbucket 项目的名称。
  • sharpen 是多分支作业的名称。
  • feature%2FQA-10738 是分支的名称,urlencoded。

我阅读了以下关于不在文件夹内启动多分支作业的问题:

从那里的答案中,我推测语法是 $JOB/$BRANCH(其中 $BRANCH 是 URL 编码的,用于将 feature/foo 之类的分支重命名为 feature%2Ffoo)。

Jenkins pipeline with folder plugin. How to build a job located different folder 我了解到文件夹内作业的语法是$FOLDER/$JOB

结合两者,我得出的结论是文件夹+作业+分支的语法很可能是$FOLDER/$JOB/$BRANCH

所以我尝试了这段代码:

build job: "iText%207%20.NET/sharpen/${java.net.URLEncoder.encode branchName, 'UTF-8'}"

  • 文件夹 = iText%207%20.NET
  • 工作 = sharpen
  • branch = ${java.net.URLEncoder.encode branchName, 'UTF-8'} (URLEncoder 将分支名称中的/ 更改为%2F

令我惊讶的是,当我运行它时,我得到了一个错误:

错误:找不到名为 iText%207%20.NET/sharpen/feature%2FQA-10738 的项目

如上所述,在 URL https://$JENKINS_URL/job/iText%207%20.NET/job/sharpen/job/feature%2FQA-10738/ 上存在作业。

Bitbucket 文件夹中的多分支作业的正确语法是什么?

【问题讨论】:

    标签: jenkins jenkins-pipeline


    【解决方案1】:

    问题出在文件夹名称 iText%207%20.NET 上,它是 iText 7 .NET 的 urlencoded 版本。显然 Jenkins 无法处理文件夹名称中的 urlencoded 空格。

    我将文件夹重命名为itext_7_dotnet,然后使用

    build job: "itext_7_dotnet/sharpen/${java.net.URLEncoder.encode branchName, 'UTF-8'}"
    

    这行得通。

    故事的寓意:永远不要在文件夹名称中使用空格!

    【讨论】:

      【解决方案2】:

      对我们来说,这是可行的:

          
          build job: "${folder}/${repo}/${branch.replace('/','%2F')}", wait: false, propagate: false
      

      您还可以使用curl 触发构建,包括碎屑等等。

      【讨论】:

      • 不起作用,我仍然收到“错误:找不到名为 iText%207%20.NET/sharpen/feature%2FQA-10738 的项目”。您的解决方案与我的解决方案之间的差异:(1)您使用 replace 替换单个字符,我使用 URLEncoder.encode/ 字符进行完全相同的替换,但如果我们的其中一个字符也可以进行其他替换白俄罗斯的开发人员会不小心在分支名称中使用西里尔字符。或者,如果 QA 的某个小丑会在分支名称中使用表情符号 (feature/?)。 (2) 你使用额外的参数wait(在我的情况下必须是真的)和propagate
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2016-10-07
      • 1970-01-01
      相关资源
      最近更新 更多