我想要实现的是构建一个阶段列表,避免使用when{}。我正在尝试运行并行管道
以下是示例代码
def stage_pull = {
stage('pulling') {
echo 'pulling'
}
}
def stage_build = {
stage(pulling) {
echo 'building'
}
}
def stage_deb = {
stage(pulling) {
echo 'deb file'
}
}
def transformIntoStages(stage1,stage2) {
//return stage1 + stage2
//return {stage1;stage2}
return stage1 << stage2
}
def agent_list = ["agent1", "agent2"]
stepsForParallel = [:]
stepsForParallel['agent1'] = transformIntoStages(stage_pull,stage_build)
stepsForParallel['agent2'] = transformIntoStages(stage_pull,stage_deb)
pipeline{
agent any
options {
timestamps()
}
stages{
stage('BUILD'){
steps{
script{
parallel stepsForParallel
}
}
}
}
}这是一个简化的版本。在实际项目中,每个智能体使用的阶段数都不同。
我还有一个方法里面有闭包的版本... https://pastebin.com/gPJjPx59
但这些都不管用。PS。我知道矩阵{},我经常使用它,但我不想在这种特殊情况下使用它。
发布于 2020-11-18 04:31:06
我想我是通过使用字符串和evaluate()函数来实现这个目标的。
def stage_pull() {
return """
stage('pulling') {
echo 'pulling'
}
"""
}
def stage_build() {
return """
stage('building') {
echo 'building'
}
"""
}
def stage_deb() {
return """
stage('deb') {
echo 'deb file'
}
"""
}
def transformIntoStages(stage1,stage2) {
echo "{" + stage1 + stage2 + "}"
return { evaluate(stage1 + stage2) }
}
stepsForParallel = [:]
stepsForParallel['agent1'] = transformIntoStages(stage_pull(),stage_build())
stepsForParallel['agent2'] = transformIntoStages(stage_pull(),stage_deb())
stepsForParallel['agent3'] = transformIntoStages(stage_pull(),'')
pipeline{
agent any
options {
timestamps()
}
stages{
stage('BUILD'){
steps{
script{
parallel stepsForParallel
}
}
}
}
}然而,我担心如果有更复杂的阶段/函数/结构和不同类型的括号,它将开始变得一团糟。蓝海不能正确地显示这一点。但在带有时间戳的日志中,最重要的是在“管道步骤”部分,我可以看到它的工作方式是应该的。
因此,我仍然对一些建议持开放态度。
https://stackoverflow.com/questions/64878226
复制相似问题