在Jenkinsfile中传递从shell提取的变量

时间:2018-07-05 09:11:44

标签: jenkins jenkins-pipeline

我试图在阶段之间传递Jenkinsfile中某个阶段提取的变量。例如:

   stage('Dummy Stage') {
    sh '''#!/bin/bash -l
        export abc=`output of some command`
        .....
        .....
       '''

现在,如何将变量abc传递到后续阶段?我尝试通过在文件顶部添加def部分来设置变量,但看起来不起作用。在没有更整洁的方式的情况下,我必须重新输入命令

3 个答案:

答案 0 :(得分:3)

这是我要获取的master上的提交次数作为全局环境变量的方法:

pipeline {

    agent any

    environment {
        COMMITS_ON_MASTER = sh(script: "git rev-list HEAD --count", returnStdout: true).trim()
    }

    stages {

        stage("Print commits") {
            steps {
                echo "There are ${env.COMMITS_ON_MASTER} commits on master"
            }
        }
    }
}

答案 1 :(得分:2)

您可以使用更长的sh步骤形式并返回输出(请参见https://jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#sh-%20shell%20script)。您的变量应在阶段之外定义。

答案 2 :(得分:0)

您可以在阶段步骤中的脚本块内使用命令式创建的环境变量,例如:

stage("Stage 1") {
    steps {
        script {
            env.RESULT_ON_STAGE_1 = sh (
                script: 'echo "Output of some command"',
                returnStdout: true
            )
        }
        echo "In stage 1: ${env.RESULT_ON_STAGE_1}"
    }
}
stage("Stage 2") {
    steps {
        echo "In stage 2: ${env.RESULT_ON_STAGE_1}"
    }
}

This guide 通过示例说明管道中环境变量的使用。