Jenkins pipeline在Agent上触发管道

niknxzdl  于 2023-08-03  发布在  Jenkins
关注(0)|答案(2)|浏览(120)

我有一个Jenkins服务器和3个代理。生成器、程序员和测试员。这三个代理人是相当自我解释。构建器构建Yocto映像并保存输出文件。程控仪获取保存的图像文件,并将其放置在受试器械上。然后,测试人员针对新的映像文件运行一套自动化测试。
如果我的Builder的Yocto阶段完成了,我希望它能启动程序员代理的管道。我很难找到这样的例子。我想应该是类似这样的:

pipeline {
    agent {
        label 'YoctoBuildNode'
    }
    
    stage('Yocto') {
            steps {
                script {
                    if (isStagingOrMaster()) {
                        echo "Performing a full Yocto build for Staging!"
                        sh "chown -R $USER:$USER ${env.WORKSPACE}"
                        sh "chmod -R a+rwx ${env.WORKSPACE}"
                        sh "${env.WORKSPACE}/jenkins_quick_start.sh"
                    } else {
                            echo "Building the main Application for branch ${env.BRANCH_NAME}"
                            buildProject()
                        }
                }
            }
        }
    stage('Doxygen') {
    
    }
    state('Trigger Programmer') {
        agent {
            label 'ProgramNode'
        }
        Not sure what to do here
    }

字符串

lh80um4z

lh80um4z1#

这里有一个例子,特别是本节的第二个例子。
简而言之,您声明顶级agent none,然后在构建的每一步都声明适当的agent
大概是这样的:

pipeline {
    agent none 
    stages {
        stage('Yocto') {
            agent { label 'YoctoBuildNode' } 
            steps {
                echo 'Yo, I'm cool Yocto'
                println agentName
            }
        }
        stage('Example Test') {
            agent { label 'ProgramNode' } 
            steps {
                echo 'Ehh, I'm boring JDK'
                println agentName
            }
        }
    }
}

字符串

w6lpcovy

w6lpcovy2#

您可以在每个阶段使用不同的代理。每个阶段将在自己的代理上执行,并且将工件从一个代理传递到另一个代理需要使用stashunstash
因为代理不共享文件系统

pipeline {
  agent none 
  stages {
    stage('Yocto') {
      agent { label 'YoctoBuildNode' } 
      steps {
        script {
          if (isStagingOrMaster()) {
            echo "Performing a full Yocto build for Staging!"
            sh "chown -R $USER:$USER ${env.WORKSPACE}"
            sh "chmod -R a+rwx ${env.WORKSPACE}"
            sh "${env.WORKSPACE}/jenkins_quick_start.sh"
          } else {
            echo "Building the main Application for branch ${env.BRANCH_NAME}"
            buildProject()
            stash includes: 'dist/**/*', name: 'builtSources'
          }
        }
      }
    }
    stage('Example Test') {
        agent { label 'ProgramNode' } 
        steps {
          unstash 'builtSources'
          println agentName
        }
    }
  }
}

字符串

相关问题