CircleCI插入环境变量

时间:2020-06-17 14:35:23

标签: environment-variables circleci circleci-2.0 circleci-workflows

昨天创建了我的第一个管道,我想用CIRCLE_BUILD_NUM环境变量替换bundle.gradle文件中的占位符。我发现的唯一方法是编写自己的“ sed”命令并在run语句中执行正则表达式。启用和运行起来效果很好,因为只有一个变量要替换,但是这种方法显然无法扩展。是否有CircleCI功能/球或其他方法可以在我的整个项目中进行更全面的占位符/ envar交换?

- run:
    name: Increment build id
    command: sed "s/_buildNum/${CIRCLE_BUILD_NUM}/g" -i build.gradle

编辑

寻找与Azure DevOps类似的实用程序/工具/ orb / CircleCI最佳实践(Jenkins也具有类似功能):只需用匹配相同名称的环境变量替换指定文件中的所有占位符即可。

https://marketplace.visualstudio.com/items?itemName=qetza.replacetokens

2 个答案:

答案 0 :(得分:2)

envtpl种工具,可以用多种语言来执行。 它允许使用环境变量中设置的值对模板中的变量进行插值。

以下描述的命令将在Rust中安装一个实现。

commands:
  replace-vars-from-env:
    description: Replace variables in file from environment variables.
    parameters:
       filename:
         type: string
    steps:
      - run:
         name: Replace variables in build.gradle file
    command: |
      if ! [ -x /usr/local/bin/envtpl ]; then
        curl -L https://github.com/niquola/envtpl/releases/download/0.0.3/envtpl.linux > /usr/local/bin/envtpl
        chmod +x /usr/local/bin/envtpl
      fi
      mv <<parameters.filename>> <<parameters.filename>>.tpl 
      cat <<parameters.filename>>.tpl | envtpl > <<parameters.filename>>
      rm <<parameters.filename>>

,并将其用于其他命令或作为您工作的一部分。例如,

executors:
  linux:
    machine:
      image: ubuntu-1604:201903-01

jobs:
  build:
    executor: linux
    steps:
      - replace-vars-from-env:
          filename: build.gradle    

答案 1 :(得分:1)

您可以使用envsubst,它基本上是开箱即用的。

根据您的primary container,您可以将envsubst安装在alpine /您的发行版之上,也可以使用已经具有该版本的映像,例如datasailors/envsubst

在这种情况下,您只需要运行configure即可:

- run:
    name: Increment build id
    command: envsubst < build.gradle.template > build.gradle

在您的模板文件中,您可以直接拥有${CIRCLE_BUILD_NUM}和其他许多变量。