# Conditional step based on environment variable

**URL:** <https://discuss.circleci.com/t/conditional-step-based-on-environment-variable/39275>\
**Category:** Build Environment\
**Created:** [March 2, 2021, 4:30pm UTC](https://discuss.circleci.com/t/conditional-step-based-on-environment-variable/39275 "2021-03-02T16:30:10Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![nikoladsp](https://sea2.discourse-cdn.com/circleci/user_avatar/discuss.circleci.com/nikoladsp/32/26828_2.png) [@nikoladsp](https://discuss.circleci.com/u/nikoladsp)\
**Post date:** [March 2, 2021, 4:30pm UTC](https://discuss.circleci.com/t/conditional-step-based-on-environment-variable/39275/1 "2021-03-02T16:30:10Z")

</div>

Hi,  
company I work for decided to give a try to CircleCI. What I have tried for past 2 days either seems impossible or I am missing something obvious. I downloaded client **0.1.15044+ec2b22a (release)** and tried to locally checkout repository using following config.yml:

```
version: 2.1

jobs:
  build-mylib:
    docker:
      - image: cimg/python:3.7.10
    steps:
      - checkout

workflows:
  main:
    jobs:
      - build-mylib

```

And run following commands:

```
circleci config validate
circleci config process .circleci/config.yml > process.yml
circleci local execute --job build-mylib

```

But got following output:

```
====>> Preparing environment variables
Using build environment variables:
  BASH_ENV=/tmp/.bash_env-localbuild-1614702436
  CI=true
  CIRCLECI=true
  CIRCLE_BRANCH=
  CIRCLE_BUILD_NUM=
  CIRCLE_JOB=build-mylib
  CIRCLE_NODE_INDEX=0
  CIRCLE_NODE_TOTAL=1
  CIRCLE_REPOSITORY_URL=
  CIRCLE_SHA1=
  CIRCLE_SHELL_ENV=/tmp/.bash_env-localbuild-1614702436
  CIRCLE_WORKING_DIRECTORY=~/project

Using environment variables from project settings and/or contexts:
  REPO_URL= **REDACTED**

The redacted variables listed above will be masked in run step output.====>> Checkout code
Making checkout directory "/home/circleci/project"
Copying files from "/tmp/_circleci_local_build_repo" to "/home/circleci/project"
Error: cp: cannot open '/tmp/_circleci_local_build_repo/.git/smartgit/logcache/nodes2' for reading: Permission denied
cp: cannot open '/tmp/_circleci_local_build_repo/.git/smartgit/logcache/subtree-origins' for reading: Permission denied

Error: 
failed to copy files: exit status 1

Step failed
Error: runner failed (exited with 101)
Task failed
Error: task failed

```

Tried many things, but did not figure out. Is it possible to have step that depends on passed environment variable? So when running build locally, I can skip checkout and make git clone as part of the run command.

I have found couple of similar issues and starting to wonder is the aim of the CircleCI **not** to be able to run builds locally on purpose? I can create my own command, pass the private key, add it to the ssh-agent and do clone, but this somehow defeats the purpose of the product and also would failed on server.

Thank you in advance.

Kindest regards

---

<div class="post-metadata">

**Author:** ![simon-swanson](https://sea2.discourse-cdn.com/circleci/user_avatar/discuss.circleci.com/simon-swanson/32/24635_2.png) [@simon-swanson](https://discuss.circleci.com/u/simon-swanson)\
**Post date:** [March 4, 2021, 11:23pm UTC](https://discuss.circleci.com/t/conditional-step-based-on-environment-variable/39275/2 "2021-03-04T23:23:52Z")

</div>

Hi @nikoladsp. I’ve tried to reproduce but have been able to run your example `config.yml` with no issues. On my machine:

```bash
mkdir testing
cd testing
git init
mkdir .circleci
pbpaste > .circleci/config.yml # I copied the contents of your config.yml before running this
circleci config validate
circleci config process .circleci/config.yml > process.yml # this command doesn't do anything useful for you
circleci local execute --job build-mylib

```

The output of the last command indicates success checking out the codebase:

```auto
✓ circleci local execute --job build-mylib
Docker image digest: sha256:8c0ed662ac11644f59ffec588750c4f8ab92d006805e1587151217d2145597ad
====>> Spin Up Environment
Build-agent version ()
Docker Engine Version: 19.03.12
Kernel Version: Linux a1955447d2ae 4.19.76-linuxkit #1 SMP Tue May 26 11:42:35 UTC 2020 x86_64 Linux
Starting container cimg/python:3.7.10
  image is cached as cimg/python:3.7.10, but refreshing...
3.7.10: Pulling from cimg/python
Digest: sha256:b0e51c41efcfb8706febd60fbf690913970c448a2e9e0cff9f07016495eba113
Status: Image is up to date for cimg/python:3.7.10
  pull stats: N/A
  time to create container: 50ms
  using image cimg/python@sha256:b0e51c41efcfb8706febd60fbf690913970c448a2e9e0cff9f07016495eba113
Time to upload agent and config: 583.1513ms
Time to start containers: 281.1075ms
====>> Preparing Environment Variables
Using build environment variables:
  BASH_ENV=/tmp/.bash_env-localbuild-1614899208
  CI=true
  CIRCLECI=true
  CIRCLE_BRANCH=
  CIRCLE_BUILD_NUM=
  CIRCLE_JOB=build-mylib
  CIRCLE_NODE_INDEX=0
  CIRCLE_NODE_TOTAL=1
  CIRCLE_REPOSITORY_URL=
  CIRCLE_SHA1=
  CIRCLE_SHELL_ENV=/tmp/.bash_env-localbuild-1614899208
  CIRCLE_WORKING_DIRECTORY=~/project

The redacted variables listed above will be masked in run step output.====>> Checkout code
  #!/bin/bash -eo pipefail
mkdir -p /home/circleci/project && cd /tmp/_circleci_local_build_repo && git ls-files | tar -T - -c | tar -x -C /home/circleci/project && cp -a /tmp/_circleci_local_build_repo/.git /home/circleci/project
Success!

```

* * *

My recommendation is to run the job with debug logging on (`circleci local execute --job build-mylib --debug`) to see if that shows you anything useful. You can also add a step to your job to show all the shell commands that get run (make this the first step in the job):

```auto
      - run:
          command: echo "set -x" | tee -a "$BASH_ENV"

```

If this isn’t enough to help you figure things out, we will need to see a more complete example to be able to help you.

* * *

More broadly: Circle can run _some_ jobs locally, but not all. Things like caches don’t work locally, and a job that requires information from other jobs will similarly fail.

Also, you can do whatever you like with environment variables in `run` steps just like you would in a shell, but you can’t use [job conditionals](https://support.circleci.com/hc/en-us/articles/360043638052-Conditional-steps-in-jobs-and-conditional-workflows) with them. Your problem seems unrelated to that though (at least with the information given).
