【发布时间】:2022-11-11 08:43:35
【问题描述】:
目前,我在一个 GitLab 存储库中有 20 多个 Helm 图表,当我更改 Helm 图表中的任何资源文件并将其推送到 git 时,我想做 Jenkins ci/cd。应该为该特定文件夹运行一项作业,并对该文件夹名称执行 helm package 和 helm cm-push。
我想创建一个 Jenkins 管道,它应该获取从提交更改文件的文件夹名称,并将文件夹名称用作 Helm 包和 helm cm-push cmd 中的变量
注意:多个文件夹或单个“提交”中的 2 或 3 个文件夹中会有更改,因此 Jobs 应该获取文件夹的名称并连续运行 Job 一个一个 将文件夹名称一个一个地设置为变量。 (循环内)
我找到了这个脚本,但是这个脚本在从 Git 提交中获取文件名时我尝试在我的 CI/CD 中设置这个脚本,但它不能根据我的需要工作。而且,此脚本获取文件名的另一件事,如果单个文件夹包含 2 个文件更改,它将显示 2 像这样
[node-app/Chart.yaml, node-app-backend/configmap.yaml, node-app-backend/deployment.yaml]
但在我们的例子中,它应该是获取文件夹名称并计为一个文件夹,并为通用或同名文件夹运行一次作业
pipeline {
agent any
stages {
stage('clone') {
steps {
git branch: 'main', url: 'https://github.com/xxx/sample.git'
}
}
stage('build') {
steps {
script {
println(getFilesChanged())
// Do your cleanup here and then execute the SH block
}
}
}
}
}
def getFilesChanged() {
def filesList = []
def changeLogSets = currentBuild.changeSets
for (int i = 0; i < changeLogSets.size(); i++) {
def entries = changeLogSets[i].items
for (int j = 0; j < entries.length; j++) {
def entry = entries[j]
def files = new ArrayList(entry.affectedFiles)
for (int k = 0; k < files.size(); k++) {
def file = files[k]
filesList.add(file.path)
}
}
}
return filesList
}
【问题讨论】:
标签: jenkins groovy continuous-integration jenkins-pipeline jenkins-groovy