【问题标题】:Jenkins Multibranch Pipeline: script / jenkinsfile as svn externalJenkins 多分支管道:脚本/jenkinsfile 作为 svn 外部
【发布时间】:2020-01-30 13:36:41
【问题描述】:

我在 Jenkins 中有一个多分支管道。我想将我的脚本文件(jenkinsfile)作为 svn 文件包含在我的开发分支中,以便为所有分支集中组织脚本。不幸的是,多分支管道的扫描无法找到脚本文件,因为它只查看声明的分支内部,而不是包含的 svn 外部位置。 有谁知道我该如何解决这个问题?

以下是我的 svn 结构、作业配置和更多信息的示例。


SVN:

root/
    scripts/
        jenkinsfile
    code/
        version1/
            branchX/
            ...
        version11/        
            branchY/
            ...

branchX、branchY 等的 SVN 外部属性

Local path:   jenkinsfile
URL:          ^/scripts/jenkinsfile
Revision Peg: 12345

多分支作业配置:

Subversion
    Project Repository Base: http://.../root/code/
    Include branches:        version1/branchX, version11/branchY
Build configuration
    Mode:        by Jenkinsfile
    Script path: jenkinsfile

多分支管道中的扫描日志消息:

...
Checking candidate branch /code/version1/branchX@HEAD
      ‘jenkinsfile’ not found
Does not meet criteria
...

我已经尝试根据以下建议禁用 subversion scm 插件的轻量级签出: Multibranch pipeline with jenkinsfile in svn:external (我在 jenkins.xml 的<service><arguments>... 下添加了-Djenkins.scm.impl.subversion.SubversionSCMFileSystem.disable=true

但是 jenkins 仍然无法找到脚本。事实上,如果我将我的脚本直接放在例如branchX 禁用的轻量级签出导致对我的工作区进行双重签出(第一个读取脚本文件,第二个读取脚本本身的第一个阶段)。

也许我的整个设置也是错误的,或者不是理想的做法?

我会很高兴您的帮助和提示。谢谢和问候!

【问题讨论】:

    标签: jenkins svn jenkins-pipeline multibranch-pipeline


    【解决方案1】:

    如果您使用的是 linux 或 bsd(osx) 系统,您可以为每个活动分支创建一个从 root/scripts/jenkinsfileroot/code/version#/branchX/jenkinsfile 的硬链接

    这样,每个分支将在本地拥有自己的jenkinsfile,使您能够使用轻量级结帐,并且您在任何位置对jenkinsfile 进行的任何更改都将可用于所有其他分支(文件系统将保留文件的一个副本,无论是否可以从许多不同的位置访问)。

    创建此类链接的 bash 命令将是

    ln root/scripts/jenkinsfile root/code/version#/branchX/jenkinsfile
    

    您需要记住每次创建分支时都创建一个新链接,或者automate that using hooks

    【讨论】:

    • 这对我来说似乎更像是一种“变通方法”。最好通过 svn external 管理该连接。这样,我可以从主干/旧版本分支未来的新目录,并且仍然有一个有效的 svn 外部链接。此外,我无法访问运行 svn 的 linux 服务器。
    • 我注意到在您的 svn:externals 定义中,您似乎在定义一个文件,而不是一个目录。有没有试过将scripts 目录定义为svn:external,然后在Jenkins 中更改管道配置以在scripts/jenkinsfile 中查找Jenkinsfile? ...您可以通过在新文件夹中本地克隆 repo 来检查 svn:externals 是否按预期工作,并查看 jenkinsfile 是否在所需的位置。
    • 从 svn 版本 1.6 开始可以使用 svn:external 文件并且它可以工作。我已经通过在本地克隆一个 repo 来检查它。在 Jenkins 中,我将 subversion scm 插件配置为使用 svn 1.8 版,所以那里应该没有问题。是的,我也尝试链接整个文件夹 als svn:external,但是 jenkins 多分支扫描仍然无法找到脚本。
    猜你喜欢
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    相关资源
    最近更新 更多