如何在Jenkins流水线作业A和作业B之间传递环境变量

164次阅读
没有评论

问题描述

在使用Jenkins流水线时遇到了一个问题,他想要将流水线作业A中的环境变量传递给流水线作业B。他尝试通过将参数传递给作业B并在作业B中设置环境变量,但是在作业B中使用${params.URL}时却得到了null值。
流水线作业A在Jenkinsfile中声明如下:

pipeline {
    agent any
    stages {
        stage('Run on all repos') {
            steps {
                script {
                    sh 'ls'
                    build job: 'run-on-single-repo'
                        parameters: [
                            string(name: 'URL', value: 'val')
                        ]
                }
            }
        }
    }
}

流水线作业B在run-on-single-repo.groovy中声明如下:

pipeline {
    agent any
    stages {
        stage('Find missing dependencies') {
            environment {
                URL = "${params.URL}"
            }
            steps {
                // ...
            }
        }
        // ...
    }
}

这两个流水线作业都在Jenkins中以“来自源代码管理的流水线脚本”方式配置,并且都能正常工作。用户想知道如何从流水线作业A将环境变量传递给流水线作业B。

解决方案

在进行下面的操作前,请确保备份并了解可能的版本差异。
要将环境变量从流水线作业A传递给流水线作业B,需要确保正确设置参数和环境变量,并在构建作业B时正确传递参数。

方案

步骤1:修正语法错误

首先,我们可以看到在流水线作业A中的build job语句中存在一个错误,即在parametersbuild之间缺少逗号。请将其修正为如下正确的语法:

build job: 'run-on-single-repo', parameters: [
    string(name: 'URL', value: 'val')
]

步骤2:指定作业B的路径

用户提到了关于在相对路径下存储作业B的问题。如果作业B存储在相对路径下,我们可以使用相对于作业A的路径来指定作业B的路径。例如,如果作业B存储在与作业A相同的目录中,可以这样指定路径:

build job: './run-on-single-repo', parameters: [
    string(name: 'URL', value: 'val')
]

或者,如果作业B存储在作业A的子目录中,可以使用类似于以下方式的路径:

build job: './path/to/run-on-single-repo', parameters: [
    string(name: 'URL', value: 'val')
]

确保根据实际情况调整路径。

通过以上步骤,你应该能够成功将环境变量从流水线作业A传递给流水线作业B。记得根据实际情况进行调整和测试,以确保一切正常运行。

注意:在进行修改时,尤其是在生产环境中,务必进行备份和测试,以避免意外损失或影响。

正文完