【问题标题】:Jenkins Multi-Branch Pipeline -- include another script into local JenkinsfileJenkins Multi-Branch Pipeline -- 在本地 Jenkinsfile 中包含另一个脚本
【发布时间】:2016-12-25 16:39:32
【问题描述】:

我们刚刚开始使用 Jenkins 多分支管道。我喜欢 Jenkins 在创建新分支时自动创建新的 Jenkins 作业的想法。它将确保所有可发布的开发都在 Jenkins 中构建。我们有大约 40 或 50 个项目,几乎每个版本都会分支,每次分支时创建这 40 个左右的工作是容易出错的工作。

但是,我看到 Jenkins 中有两种类型的管道构建:

  • 常规管道构建:您在 Jenkins 作业中指定位置和分支。但是,您可以指定是要使用 Jenkins 作业配置中的脚本还是源存储库中的脚本。这将允许我们为所有工作维护一个 Jenkinsfile。如果我们在构建过程中更改某些内容,我们只需要编辑一个 Jenkinsfile。

  • 多分支管道构建:创建新分支时,Jenkins 会自动为您创建新的 Jenkins 作业。这意味着当一个新分支出现时,我们不再需要创建几十个新的 Jenkins 项目。但是,看起来Jenkinsfile 必须位于项目的根目录上。如果您对构建过程进行了基本更改,则必须更新所有 Jenkins 项目。

我希望能够使用多分支管道构建,但我想指定从我们的存储库中提取 Jenkinsfile 的位置,或者从存储库 URL 中包含一个主 Jenkinsfile

有没有办法使用 Jenkins 多分支管道来做到这一点?

【问题讨论】:

    标签: jenkins-pipeline jenkinsfile


    【解决方案1】:

    如果您有跨存储库的通用构建逻辑,则可以将大部分管道逻辑移至单独的 groovy 脚本。然后可以在任何 Jenkinsfile 中引用此脚本。 这可以通过检查 groovy 脚本在另一个目录中的 repo 的另一个签出然后执行标准 groovy 加载来完成,或者,可能更好的方法是将其作为 groovy 脚本存储在 Jenkins 全局脚本库中- 本质上是 Jenkins 中一个自包含的 git repo (有关详细信息,请参阅https://github.com/jenkinsci/workflow-cps-global-lib-plugin/blob/master/README.md)。

    我们有类似的需求,并在脚本中创建了一个全局 groovy 方法,该方法在 Git 中维护并在更改时部署到 /vars/ 下的 Jenkins 全局脚本库: 例如脚本'scriptName.groovy'有

    def someMethod(){
       //some build logic
       stage 'Some Stage'
       node(){
        //do something
       }
    }
    

    这样就可以在任何 Jenkinsfile 中通过

    调用通用函数
    scriptName.methodName()
    

    【讨论】:

    • 是的,请查看this answer 以获取更多示例。
    • 另外,如果你给方法名“call”,你就可以用脚本文件名来调用它。所以如果你有一个文件 /vars/scriptName.groovy 你会像 scriptName() 一样使用它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 2017-11-23
    • 1970-01-01
    • 2015-03-01
    • 1970-01-01
    相关资源
    最近更新 更多