如何从Jenkinsfile中的docker run命令的返回值中获取环境变量的set值?

u7up0aaq  于 2023-04-19  发布在  Jenkins
关注(0)|答案(1)|浏览(169)

我有一个docker容器,它返回一个大于或等于0的值,如果我在本地运行容器,我会得到一个返回值:

docker build -t tmp -f Dockerfile .
id=$(docker run --rm -v /mnt/BARAT_Data1/Weather_Files/NOAA_Forecasts:/weather_dir tmp)
echo $id  # Prints 0

我把这个放在我的jenkins脚本里:

stage("Run download process") {
            when {
                expression{currentBuild.currentResult == 'SUCCESS'}
            }
            steps {
                sh """
                docker rm -f sync_noaa || true
                rm -rf ${WEATHER_DIR}/staging/*
                """
                script {
                    env.NUM_PROCESSED=sh(script:'docker run --rm -v ${WEATHER_DIR}:/weather_dir ${DOCKER_TAG}', returnStdout: true).trim()
                }
                sh """
                echo ${env.NUM_PROCESSED}
                """
            }
        }

但是,这是将env.NUM_PROCESSED打印为null
我已经尝试了不同的方法来做这件事,从相关的问题,从一个shell命令设置一个jenkins环境变量的值,但我没有尝试过工作。
如何从docker run命令的返回值中获取环境变量的set值?

stszievb

stszievb1#

您可以通过添加以下内容来创建可变全局变量:

import groovy.transform.Field
@Field def num_processed

pipeline之前。然后,您可以通过执行以下操作来修改和打印变量的值:

stage("Run download process") {
            when {
                expression{currentBuild.currentResult == 'SUCCESS'}
            }
            steps {
                sh """
                docker rm -f sync_noaa || true
                rm -rf ${WEATHER_DIR}/staging/*
                """
                script {
                    num_processed = sh(
                        script: "docker run --rm -v ${WEATHER_DIR}:/weather_dir ${DOCKER_TAG}",
                        returnStdout: true
                    ).trim()
                    echo num_processed
                }
            }
        }

相关问题