首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何动态创建stages /连接闭包?

如何动态创建stages /连接闭包?
EN

Stack Overflow用户
提问于 2020-11-17 23:28:50
回答 1查看 25关注 0票数 0

我想要实现的是构建一个阶段列表,避免使用when{}。我正在尝试运行并行管道

以下是示例代码

代码语言:javascript
复制
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。我知道矩阵{},我经常使用它,但我不想在这种特殊情况下使用它。

EN

回答 1

Stack Overflow用户

发布于 2020-11-18 04:31:06

我想我是通过使用字符串和evaluate()函数来实现这个目标的。

代码语言:javascript
复制
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
                }
            }
        }
    }
}

然而,我担心如果有更复杂的阶段/函数/结构和不同类型的括号,它将开始变得一团糟。蓝海不能正确地显示这一点。但在带有时间戳的日志中,最重要的是在“管道步骤”部分,我可以看到它的工作方式是应该的。

因此,我仍然对一些建议持开放态度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64878226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档