【问题标题】:Jenkins Pipeline - Access environment variable in nodejs buildsJenkins Pipeline - 在 nodejs 构建中访问环境变量
【发布时间】:2018-09-21 11:43:39
【问题描述】:

我需要一些有关我的 Jenkins 管道的帮助。 我想要做的是按特定顺序触发一些构建以登录平台、部署应用程序并再次注销。
构建以 nodejs 脚本的形式实现,并使用环境变量存储数据并访问先前构建的数据。
我的问题是,当我尝试从我的 nodejs 脚本中访问环境变量时,我总是收到未定义的。例如:在“LoginToPlatform”构建中,我使用 process.env.username 来接收用户名,但即使我在管道的环境块中设置了环境变量,我也会收到未定义的。

所以我的问题是如何从我的构建(nodejs 脚本)中访问环境变量?

这是构建顺序:

1. 'LoginToPlatform'
Uses process.env.username and process.env.password
Sets process.env.session

2. 'DeployOnPlatform'
Uses process.env.session

3. 'LogoutFromPlatform'
Uses process.env.session

我的 Jenkins 流水线:

pipeline {
agent any

environment {
    username = 'abc'
    password = 'asdf'
}
stages {
    stage ('Login') {
        steps {
            echo 'Login.'
            build job: 'LoginToPlatform'
        }
    }
    stage ('Deployment') {
        steps {
            echo 'Deployment.'
            build job: 'DeployOnPlatform'
        }
    }
    stage ('Logout') {
        steps {
            echo 'Logout.'
            build job: 'LogoutFromPlatform'
        }
    }
}
}

【问题讨论】:

  • 在阅读了有关此主题的更多信息后,我试图实现的目标似乎是不可能的,因为您在 nodejs 脚本中设置的环境变量仅在该进程中可用。如果我错了,请纠正我。
  • 是的,你是对的,它将在进程中可用。但正如下面 Alex 所提到的,您可以在脚本中使用 process.env.username 获取变量值。

标签: node.js jenkins environment-variables jenkins-pipeline


【解决方案1】:

这是访问env 变量的方法之一。

詹金斯文件

pipeline {
    agent {
        docker {
            image 'node:6-alpine' 
        }
    }

    environment {
        VARIABLE_1="10"
        VARIABLE_2="7"
    }

    stages {
        stage('Build') { 
            steps {
                sh 'node main.js' 
            }
        }
    }
}

main.js

const envOne = process.env.VARIABLE_1;
const envTwo = process.env.VARIABLE_2;

console.log("envOne: " + envOne);
console.log("envTwo: " + envTwo);

输出:

Jenkins seems to be running inside container 646633d29eac6e0e5b56e4aef28055075b5a2274e26b159387a7a34f35919fe3
$ docker run -t -d -u 0:0 -p 3000:3000 -w /var/jenkins_home/workspace/fff_master-RUQD36MGKNUXMF26H5CQBCDE6AKFWFLUOG7MTQ6WMTXNXKQHCNMA --volumes-from 646633d29eac6e0e5b56e4aef28055075b5a2274e26b159387a7a34f35919fe3 -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** node:6-alpine cat
$ docker top 3fe3059a78e890dc2cadd722c25b97d5a023da059cc807cef3acb29237f0261f -eo pid,comm
[Pipeline] {
[Pipeline] withEnv
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Build)
[Pipeline] sh
[fff_master-RUQD36MGKNUXMF26H5CQBCDE6AKFWFLUOG7MTQ6WMTXNXKQHCNMA] Running shell script
+ node main.js
envOne: 10
envTwo: 7
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
$ docker stop --time=1 3fe3059a78e890dc2cadd722c25b97d5a023da059cc807cef3acb29237f0261f
$ docker rm -f 3fe3059a78e890dc2cadd722c25b97d5a023da059cc807cef3acb29237f0261f
[Pipeline] // withDockerContainer
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline

【讨论】:

  • 您如何访问位于另一个文件夹中的一个 .env 文件。我正在尝试配置我的敏感信息(密码、用户等),但我不知道如何从另一个文件夹中获取它。我试图从 Jenkins 管道中读取文件,但它没有看到它...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-26
  • 1970-01-01
  • 1970-01-01
  • 2020-04-27
  • 2018-04-16
  • 1970-01-01
相关资源
最近更新 更多