从文件中获取作业 DSL 脚本时。我如何在 jenkins helm 图表 jcasc 部分以及格式中完成此操作?

问题描述 投票:0回答:2

到目前为止我所理解的:这是有道理的,我传递一个文件而不是对脚本值进行硬编码

jobs:
  - script: >
      multibranchPipelineJob('configuration-as-code') {
          branchSources {
              git {
                  id = 'configuration-as-code'
                  remote('https://github.com/jenkinsci/configuration-as-code-plugin.git')
              }
          }
      }

jobs:
  - file: ./jobdsl/job.groovy

当前设置:在 jcasc 部分下的 jenkins helm 值文件中,我有以下内容。这很好,它可以与我此处未展示的其他配置一起使用(与本讨论无关)

   JCasC:
      defaultConfig: true
      configScripts:
        pipeline-job: |
          jobs:
            - script: >
                multibranchPipelineJob('testrepo') {
                  branchSources {
                    git {
                      id('testrepo')
                      credentialsId('bitbucketv1')
                      remote('https://bitbucket.org/repo/test.git')
                      includes("master develop")
                      excludes("")
                    }
                  }

问题:

如何获取我的一段代码并将其作为文件传递,例如“- file: ./jobdsl/job.groovy”。我在 jenkins helm 文件夹中创建了一个名为 jobdsl 的文件夹,并在开始时添加了 job.groovy 和 multibranchpipelinejob 代码片段。但我收到错误消息说文件不存在。

我需要先创建一个配置映射并将此文件加载到 jenkins 中吗?或者有没有办法将文件从本地传递到上面我的 helm 图表片段中的 jcasc 脚本?另外 job.groovy 的正确格式是什么?它包含 -script: > 部分还是仅来自 multibranchpipelinejob 及以下?

jenkins kubernetes-helm jcasc
2个回答
0
投票

不幸的是,我不确定这是否可能。我试图弄清楚同样的事情,但无济于事。不过,我将在这里记录我的步骤,以防万一我遗漏了某个步骤,有人可以帮助填写。

我正在使用 Jenkins Helm 图表 https://github.com/jenkinsci/helm-charts 并已在 Minkube 上部署我的实例。

根据可设置的可用图表值,我添加了以下内容:

persistence:
enabled: true
accessMode: "ReadWriteOnce"
size: "100Gi"

volumes:
  - name: jacsc-jenkins-jobdsl-pipelines
    configMap:
      name: jacsc-jenkins-jobdsl-pipelines
mounts:
  - mountPath: /var/jenkins_home/jobdsl
    name: jacsc-jenkins-jobdsl-pipelines

这里的想法是,由于所有 CACS 脚本都保存到 /var/jenkins_home/cacs_scripts 文件夹中(您可以通过深入研究 helm 图表代码来看到这一点),我也可以将 JobDSL 代码挂载到 pod 中并引用它。

这是我用来将 CACS 代码添加到 jenkins pod 的配置图:

apiVersion: v1
kind: ConfigMap
metadata:
  name: jacsc-jenkins-jobs
  namespace: jenkins
  labels:
    "jenkins-jenkins-config": "true"
data:
  jacsc-jenkins-jobs.yaml: |
    jobs:
      - script: >
          folder('Tests')
      - file: ../../../../jobdsl/image-builder.groovy

然而,并没有什么卵用。我尝试从映射的配置映射文件以及实际文件的角度引用该文件,该文件“似乎”是 Job DSL 插件的已编译 Java 代码。每次都说找不到文件。 根据我发现的关于此处使用的

File()

https://github.com/jenkinsci/job-dsl-plugin/blob/master/job-dsl-plugin/src/main/groovy/javaposse/jobdsl /plugin/casc/FromFileScriptSource.java
)我的假设是,这通过作业工作区查找路径,这与 pod 上的作业 DSL 代码不同。 如果有人发现任何其他相关内容来证明它确实有效,请告诉!


0
投票
groovy jcasc 插件

的以下 jcasc 片段发现了这一点: groovy: - script: > def dir = new File('.').absolutePath; println("current working directory"); println(dir);

这给出了

current working directory /.

在日志中。这意味着您可以通过指定绝对路径从 jcasc 加载 jobdsl,如下所示:

jobs: - file: /var/jenkins_home/casc_configs/jobdsl.groovy

我验证了它是否有效(假设您将配置映射安装到此特定文件)。

© www.soinside.com 2019 - 2024. All rights reserved.