到目前为止我所理解的:这是有道理的,我传递一个文件而不是对脚本值进行硬编码
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 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 代码不同。 如果有人发现任何其他相关内容来证明它确实有效,请告诉!
的以下 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
我验证了它是否有效(假设您将配置映射安装到此特定文件)。