Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CircleCI insert environment variable

I created my first pipeline yesterday and I wanted to replace a placeholder in my bundle.gradle file with the CIRCLE_BUILD_NUM environment variable. The only method I found find was writing my own ‘sed’ command and executing the regex in a run statement. This worked fine to get up and running, since there was only one variable to replace, however this method obviously won’t scale, down the road. Is there a CircleCI feature/orb or other method to do a more comprehensive placeholder/envar swap throughout my project?

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

EDIT

Looking for a utility/tools/orb/CircleCI best practice similar to what they have in Azure DevOps (Jenkins performs a similar feature as well): simply replace all placeholders in specified files with environment variables matching the same name.

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

like image 883
NealR Avatar asked Sep 17 '25 09:09

NealR


1 Answers

There is envtpl tool with myriad of implementation in various languages. It allows for interpolating variables in templates with values set in environment variables.

The following described command installs an implementation in 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>>

and use that in other commands or as a part of your jobs. For example,

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

jobs:
  build:
    executor: linux
    steps:
      - replace-vars-from-env:
          filename: build.gradle    
like image 163
Oluwafemi Sule Avatar answered Sep 19 '25 07:09

Oluwafemi Sule