在主要执行人上运行詹金斯舞台

弗兰克诉霍夫

我正在尝试创建一个为应用程序构建多个项目的管道。

当项目成功构建(并行)时,我需要更新主执行器上的文件(以更改标签)。但是,詹金斯陷入了“等待执行者”的困境(我猜是因为执行者正在等待并行阶段的完成?)

我的管道(简体):

def parallelStages = [:]
pipeline {
    agent any
    options { skipDefaultCheckout() }
    stages {
        // Grab code from GitRepo
        stage ("Checkout Code") {
            steps {
               // grab code from repo
               // stash code for slaves
               // This stage is executed on master, at workspace NAME@2
            }
        }
        stage ("Find Project") {
            steps {
               // findFiles is used to find projects, and assign them 
               parralelStages.put('foldername', BuildAndTestProject('folder'))
               // This stage is executed on master, at workspace NAME@2
            }
        }
        stage ("BuildAndTest") {
            steps {
                script {
                    parralelStages.put('failFast', false)
                    parallel(parralelStages)
                }
            }
        }
        stage ("deploy") {
            // Deploy newly built projects based on YAML
        }
    }

BuildAndTestProject-Function(简体):

def BuildAndTestReact(def name) {
    def label = "build-slave-${name}-${BUILD_NUMBER}"
    return {
        podTemplate(label: label, yaml: """) {
            node(label) { // This is a build-slave
                stage("BuildAndTest") {
                    stage("Unstash") {
                        // Unstash source for project on slave
                    }
                    stage("Build") {
                        // Build Project
                    }
                    stage("Test") {
                        // Test Project
                    }
                    stage("Set Yaml-Tag") {
                        node('master') { // THIS SHOULD RUN ON THE MAIN EXECUTOR, AS IT HAS THE FILES FOR ALL PROJECTS (I don't really know how I would dynamically stash/unstash these back to that executor from this slave)
                            // Update YAML for this project to set the tag to the one that was built in Build-Stage
                         }
                     }
                 }
             }
         }
     }
 }

我想要的是主要执行器(运行“签出代码”阶段的执行器)为并行构建的每个项目更新YAML。

我不在乎YAML更新是否按顺序进行,我只需要对所有已构建的项目进行更新即可。

将来,我要确保在“查找项目”阶段仅抓住具有文件更改的项目。然后,所有其他项目将在“部署”阶段保留标签“最新”。

在主节点上有多个执行程序的情况下,“ Set Yaml-Tag”在不同的工作空间(例如NAME @ 3 NAME @ 4等)中运行,而这些工作空间实际上没有NAME @ 2中的文件。(意味着它不适用于文件)

编辑:视觉辅助(由Blue Ocean插件提供):

我需要在主要执行程序(蓝色圆圈)上运行Update YAML阶段(红色圆圈),因为我在“清除测试名称空间”中应用了文件 视觉辅助

马拉特

此行为是完全按设计,因为詹金斯并没有想在几个分支并行运行,因为在绝大多数场景一个分支将打破其他的更新相同的文件。

您可能想以其他方式解决您的问题。我可以想到的是让所有并行分支都为您设置一个具有所需值的环境变量,并在所有并行分支都完成后,使最终分支读取这些环境变量并使用这些值更新文件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章