如何将外部环境变量注入jenkins配置和管道作业?

时间:2016-12-22 09:20:48

标签: jenkins docker environment-variables docker-compose jenkins-pipeline

我们使用docker-compose在Docker容器中运行Jenkins。

目标是能够运行可由docker-compose命令提供的环境变量配置的生产和测试环境。

我们在docker-compose.yml文件中定义了几个环境变量,例如:

environment:
         - gitlabrepourl=http://url-of-our-git-repo/repo-name
         - hosturl=http://jenkins-host-url

运行bash shell时,环境变量存在于容器内部,但是我们在Jenkins配置和管道脚本中使用它们时遇到了问题。

一些例子:

  • 创建管道作业并选择“来自SCM的管道脚本”时 - > git - >存储库URL = $ {gitlabrepourl}。管道作业能够克隆存储库以获取Jenkins文件,但是当运行'checkout scm'时它会失败,因为$ {gitlabrepourl}未解析。 (Jenkins bug也许??)
  • 尝试在Jenkins系统配置中使用环境变量时,不会在所有位置解析它们。例如当试图使用$ {hosturl}作为我们的'Jenkins URL'配置时,它没有得到解决。或者在我们的'Gitlab主机URL'配置中尝试使用$ {gitlabrepourl}时,它不会通过连接测试。

要点:

  1. 我们如何在jenkins配置中使用环境变量,以及我们如何知道哪些字段支持使用环境变量?
  2. 如何将docker容器中存在的环境变量注入管道脚本?
  3. 任何可以帮助我们实现任何目标的方式都将受到高度赞赏。
  4. 感谢。

2 个答案:

答案 0 :(得分:1)

可能有更好的方法,但这就是我为docker做的事情:

我创建了一个.env文件,其中包含以下内容:

CONFLUENCE_VERSION=6.1.1
MYSQL_CONNECTOR_VERSION=5.1.41

Docker-compose会自动将它们作为环境变量拉出来。

然后我将它们作为args传递给docker-compose.yml的构建部分:

version: '2'
services:
  app:
    build:
      context: .
      args:
      - CONFLUENCE_VERSION=${CONFLUENCE_VERSION}
      - MYSQL_CONNECTOR_VERSION=${MYSQL_CONNECTOR_VERSION}

从Jenkinsfile中的.env读取CONFLUENCE_VERSION:

CONF_VER = sh(returnStdout: true, script: 'grep -e "CONFLUENCE_VERSION" .env | awk -F\'=\' \'{print $2}\'').trim()

答案 1 :(得分:0)

例如,您可以从某个文件中注入变量 enter image description here .dockerproperties - 您在SCM回购中的文件 如果在这个文件中你有行 varName1 =测试 你可以在$ {varName1}格式中使用它 另外,如果你想使用git中的一些信息,比如tag或commit id,你应该安装插件https://wiki.jenkins-ci.org/display/JENKINS/Git+Parameter+Plugin