我使用this answer获取Jenkins作业中更改的文件列表。我现有的Jenkinsfile看起来像这样:
script {
sshagent(credentials : ['jenkins-bitbucket-lfs']) {
sh '''#!/bin/bash
./build.sh
'''
}
}
字符串
如果我从上面的答案中添加代码,我会得到已更改文件的列表。但我不知道如何将列表一次传递给一个文件。我试过了
script {
// get the list of changed files
changedFiles = []
for (changeLogSet in currentBuild.changeSets) {
for (entry in changeLogSet.getItems()) { // for each commit in the detected changes
for (file in entry.getAffectedFiles()) {
changedFiles.add(file.getPath()) // add changed file to list
}
}
}
echo "Changed files: ${changedFiles}\n"
sshagent(credentials : ['jenkins-bitbucket-lfs']) {
changedFiles.eachWithIndex { item, idx ->
echo "Changed file ${idx}: ${item}\n"
sh '''#!/bin/bash
echo "Changed file = ${item}"
./build.sh ${item}
'''
}
}
}
型
Groovy中报告了文件列表和单个文件,但bash中的参数为空。我怎么才能让它工作?
2条答案
按热度按时间uubf1zoe1#
我觉得是你的语法。Jenkins使用引号的方式对我来说很模糊,但我认为当使用三重引号(
'''...'''
)时,你只能访问环境变量,而使用三重双引号("""..."""
),你可以访问脚本中的每个变量(在同一作用域中声明)。hec6srdp2#
据我所知,groovy生成的变量在shell环境中是不能直接访问的。您需要使用脚本块 Package 它们,或者通过定义全局变量来存储它们。你也可以把它们放到一个临时文本文件中,然后用shell命令从那里读取。这个例子是这样的
字符串
然后使用定义的变量传递到shell中。