CircleCI вставить переменную среды - PullRequest
3 голосов
/ 17 июня 2020

Вчера я создал свой первый конвейер и хотел заменить заполнитель в моем файле bundle.gradle на переменную среды CIRCLE_BUILD_NUM. Единственный метод, который я нашел, - это написать мою собственную команду sed и выполнить регулярное выражение в операторе run. Это нормально работало, поскольку нужно было заменить только одну переменную, однако этот метод, очевидно, не будет масштабироваться в будущем. Есть ли функция / сфера CircleCI или другой метод для более полной замены заполнителя / envar в моем проекте?

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

EDIT

Ищете утилиту / tools / orb / CircleCI передовой опыт, аналогичный тому, что они имеют в Azure DevOps (Jenkins также выполняет аналогичную функцию): просто замените все заполнители в указанных файлах на переменные среды, соответствующие тому же имени.

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

Ответы [ 2 ]

2 голосов
/ 22 июня 2020

Существует инструмент 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 голос
/ 29 июня 2020

Вы можете использовать envsubst , который предоставляет это в основном из коробки.

В зависимости от вашего основного контейнера вы можете установить envsubst поверх alpine / вашего дистрибутива или используйте какое-то изображение, которое уже имеет это, например datasailors / envsubst .

В этом случае вам просто нужно запустить configure, например:

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

И в вашем файле шаблона вы можете иметь ${CIRCLE_BUILD_NUM}, как и многие другие переменные напрямую.

...