【问题标题】:CircleCI insert environment variableCircleCI 插入环境变量
【发布时间】:2020-10-07 10:07:57
【问题描述】:

我昨天创建了我的第一个管道,我想用 CIRCLE_BUILD_NUM 环境变量替换我的 bundle.gradle 文件中的占位符。我发现的唯一方法是编写自己的“sed”命令并在运行语句中执行正则表达式。这很好地启动和运行,因为只有一个变量要替换,但是这种方法显然不会扩展,在路上。是否有 CircleCI 功能/orb 或其他方法可以在整个项目中进行更全面的占位符/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

【问题讨论】:

  • 对于单个文件,envsubst 做得很好。不过对整个项目来说不是很方便。
  • @taleodor 这就是我目前在 bash 脚本中使用的。不过,我想知道 CircleCI 认为此类操作的最佳实践是什么。

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


【解决方案1】:

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    

【讨论】:

    【解决方案2】:

    您可以使用envsubst,它基本上提供了开箱即用的功能。

    根据您的primary container,您可以将 envsubst 安装在 alpine/您的发行版之上,或者使用一些已有的映像,例如 datasailors/envsubst

    在这种情况下,您只需要像这样运行配置:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-09
      • 2018-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多