【问题标题】:How to create a jenkins pipelineJob via Configuration as code?如何通过 Configuration as code 创建 jenkins pipelineJob?
【发布时间】:2019-01-30 05:59:09
【问题描述】:

我想使用脚本在我的 Jenkins 配置中创建一个简单的管道作业。所以我的 jenkins.yaml 文件如下:

 jobs:
  - script: >
      pipelineJob('Tag Repositories') {
        definition {
          cps {
            def theScript = readFileFromWorkspace('git_tag_job.groovy')
            script(theScript)
            sandbox()
          }
        }
      }

所以我认为文件 git_tag_job.groovy 可以位于 Jenkins 主目录中,但看起来 readFileFromWorkspace 正在查看尚未创建的此作业的工作区。结果,我收到 NPE 错误,因为工作空间为空。

现在的问题是如何使用 Configuration As Code 插件以 git_tag_job.groovy 的内容作为其脚本添加此作业?

脚本很大,无法放入 Yaml 文件中。

让我感到奇怪的是,如果我们无法从某个地方加载脚本,那么这个配置和 readFileFromWorkspace 就毫无用处,因为您很少有使用单行脚本的管道作业,因此从文件加载是唯一实用的选项.

我在这里遗漏了什么还是有其他方法可以做到这一点?

【问题讨论】:

    标签: jenkins jenkins-plugins jenkins-job-dsl jcasc


    【解决方案1】:

    我知道这是一个老问题,但我遇到了完全相同的问题,所以这里有一个解决方案,遵循@xbmono 的评论,供任何在这里绊倒的人使用:

    我选择将种子作业 dsl 脚本与 yaml 文件分开,但基本相同。

    casc.yaml

    ...
    jobs:
      -file: /abs/path/to/seedjob.groovy
    

    seedjob.groovy

    theScript = new File('/abs/path/to/git_tag_job.groovy').getText("UTF-8")
    pipelineJob('Tag Repositories') {
      definition {
        cps {
          script(theScript)
          sandbox()
        }
      }
    }
    
    

    【讨论】:

    • 谢谢!我们终于做了完全相同的事情,因为我们找不到解决方案:)
    【解决方案2】:

    由 CasC 创建的种子作业按设计在没有工作区的情况下运行。您的整个配置应“作为代码”进行管理并进行版本控制。在您的情况下,作业脚本可以从 URL、git 标签等加载。

    【讨论】:

    • 是的,但这种情况略有不同。作业本身是存储在源代码控制中的 jenkins 配置的一部分。我们在源代码中包含它们的原因是能够拆除整个 jenkins env 并在不丢失所有配置的情况下启动它。无论如何,我最终使用了 groovy new File(pathToFile).text,它现在可以工作了
    猜你喜欢
    • 2020-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    • 2013-07-16
    相关资源
    最近更新 更多