当前位置: 首页 > 知识库问答 >
问题:

詹金斯多分支管道:脚本/jenkinsfile作为svn外部

欧阳子石
2023-03-14

我在詹金斯有一条多分支管道。我想将我的脚本文件(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插件的轻量级签出:svn:external中带有Jenkins文件的多分支管道(我在添加-Djenkins.scm.impl.subversion.SubversionSCMFileSystem.disable=true

但是詹金斯仍然找不到剧本。事实上,如果我直接将脚本放入例如branchX中,禁用的轻量级签出将导致双重签出到我的工作区(第一个是读取脚本文件,第二个是因为它是脚本本身的第一个阶段)。

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

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


共有1个答案

张晨朗
2023-03-14

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

这样,每个分支将有自己的jenkinsfile在本地可用,使您能够使用轻量级签出,并且您在任何位置引入到jenkinsfile的任何更改都将对所有其他分支可用(文件系统将保留文件的单个副本,无论可以从许多不同的位置访问)。

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

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

您需要记住,每次创建分支时都要创建一个新链接,或者使用钩子将其自动化

 类似资料:
  • 问题内容: 我有一个jenkins管道,该管道可以构建Java工件,将其复制到目录中,然后尝试执行外部脚本。 我在管道脚本中使用此语法来执行外部脚本 该脚本只是一个简单的Docker构建脚本,但是由于以下异常,构建将失败: 由于脚本不会创建任何目录,因此该错误令人困惑。它只是构建一个docker映像,并将新构建的java工件放置在该映像中。 如果我在jenkins中创建另一个作业,该作业执行外部脚

  • 问题内容: 我正在使用Pipeline插件运行Jenkins 2。我已经建立了一个多分支管道项目,其中每个分支(主分支,开发分支等)的根目录都有一个Jenkinsfile。设置起来很简单。但是,即使代码没有更改,如何使每个分支定期运行(而不是分支索引)也让我迷惑不解。我需要在Jenkinsfile中添加什么以启用定期构建? 问题答案: 如果您使用声明式样式Pipeline并且只想触发特定分支上的构

  • 我试图从流水线步骤中运行一个job-dsl脚本。一般来说,这应该是可能的,正如这里所描述的,在管道步骤中添加了以下代码片段: null 我如何知道脚本的真实位置,以及如何指定一个jobDsl作为目标,它本身位于不同的repo中?还是我完全走错了方向? 编辑 经过进一步的研究,共享库存储库被签出到“真实”工作区旁边的一个目录中,后缀为@libs,这似乎是事实。所以我认为使用以下方法是个好主意: 与此

  • 我正在使用jenkins管道,我的Jenkinsfile有几个阶段和工作。有没有办法在詹金斯管道之外运行特定的工作? 示例:假设其中一个阶段是执行“SCP构建工件到远程位置”。出于某种原因,这失败了,如果我想手动运行jenkins管道之外的其他工作,我如何做到这一点? 我对调用新的构建最不感兴趣。那么,我们可以手动运行jenkins管道以外的故障后的剩余作业吗?

  • 问题内容: 已解决 :感谢S.Richmond的以下答复我需要取消所有类型的存储映射,这意味着将变量和使用后作废。 附加 :搜索此错误的人员可能有兴趣使用Jenkins管道步骤- 在此处查找更多信息。 我正在尝试使用Jenkins Pipeline从用户那里获取输入,该输入作为json字符串传递给作业。管道然后使用隔离器对此进行解析,然后选择重要信息。然后,它将使用该信息与不同的作业参数并行运行1

  • 下面是我简单的jenkins pipeline groovy脚本,它将用这两个阶段和我们想要构建的作业创建一个管道,我希望在job configuration下的脚本中每次都更新用于构建和代码分析的作业名,方法是从用户界面中获取数据,用户将使用Eclipse提供构建作业名和代码分析作业名- jenkinsfile脚本:-