
Product
Socket for Jira Is Now Available
Socket for Jira lets teams turn alerts into Jira tickets with manual creation, automated ticketing rules, and two-way sync.
Get environment variables exposed by CI services.
Adapted from codecov-node.
$ npm install --save env-ci
import envCi from "env-ci";
const {
name,
service,
isCi,
branch,
commit,
tag,
build,
buildUrl,
job,
jobUrl,
isPr,
pr,
prBranch,
slug,
root,
} = envCi();
if (isCI) {
console.log(`Building repo ${slug} on ${name} service`);
if (isPr) {
console.log(
`Building Pull Request #${pr} originating from branch ${prBranch} and targeting branch ${branch}`,
);
} else {
console.log(`Building branch ${branch}`);
}
if (service === "travis") {
// Do something specific to Travis CI
}
}
| Variable | Description |
|---|---|
name | CI service Commercial name (e.g. Travis CI, CircleCI, GitLab CI/CD) |
service | Standardized CI service name (e.g. travis, circleci, gitlab) |
isCi | true is running on a CI, false otherwise |
branch | Git branch being built or targeted by a Pull Request |
commit | Commit sha that triggered the CI build |
tag | Git tag that triggered the CI build |
build | CI service build number |
buildUrl | Link to the CI service build |
job | CI service job number |
jobUrl | Link to the CI service job |
isPr | true if the build has been triggered by a Pull Request, false otherwise |
pr | Pull Request number (only for builds triggered by a Pull Request) |
prBranch | Git branch branch from which the Pull Request originated (only for builds triggered by a Pull Request) |
slug | The slug (in form: owner_name/repo_name) of the repository currently being built |
root | The path to the directory where the repository is being built |
Note: Some variables can be detected only on certain CI services. See Supported CI.
Note: The pr and prBranch properties are only available for builds triggered when a Pull Request is
opened/updated and not on builds triggered by a push on a branch even if that branch happens to be the branch from which
the Pull Request originated.
CI Service (name) | service | isCi | branch | commit | tag | build | buildUrl | job | jobUrl | isPr | pr | prBranch | slug | root |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| AppVeyor | appveyor | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| Azure Pipelines | azure-devops | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: | :x: | :x: | :x: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: |
| Bamboo | bamboo | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | :x: | :x: | :white_check_mark: |
| Bitbucket | bitbucket | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | :x: | :x: | :white_check_mark: | :white_check_mark: |
| Bitrise | bitrise | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: |
| Buddy | buddy | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: | :x: |
| Buildkite | buildkite | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| CircleCI | circleci | :white_check_mark: | :warning: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: |
| Cirrus CI | cirrus | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| Cloudflare Pages | cloudflarePages | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :white_check_mark: |
| AWS CodeBuild | codebuild | :white_check_mark: | :warning: | :white_check_mark: | :x: | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | :x: | :x: | :x: | :white_check_mark: |
| Codefresh | codefresh | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: | :white_check_mark: | :x: | :x: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| Codeship | codeship | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | :x: | :x: | :white_check_mark: | :x: |
| Drone | drone | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| GitHub Actions | github | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: | :white_check_mark: | :x: | :x: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| GitLab CI/CD | gitlab | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| Jenkins | jenkins | :white_check_mark: | :warning: | :white_check_mark: | :x: | :white_check_mark: | :white_check_mark: | :x: | :x: | :warning: | :warning: | :warning: | :white_check_mark: | :white_check_mark: |
| Netlify | netlify | :white_check_mark: | :warning: | :white_check_mark: | :x: | :white_check_mark: | :white_check_mark: | :x: | :x: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| Puppet | puppet | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | :x: | :x: | :x: | :white_check_mark: |
| Sail CI | sail | :white_check_mark: | :warning: | :white_check_mark: | :x: | :x: | :x: | :x: | :x: | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: | :white_check_mark: |
| Screwdriver.cd | screwdriver | :white_check_mark: | :warning: | :white_check_mark: | :x: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| Scrutinizer | scrutinizer | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: | :x: | :x: | :x: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: |
| Semaphore | semaphore | :white_check_mark: | :warning: | :white_check_mark: | :warning: | :white_check_mark: | :x: | :x: | :x: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| Shippable | shippable | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| TeamCity | teamcity | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: | :x: | :x: | :x: | :x: | :x: | :x: | :white_check_mark: | :white_check_mark: |
| Travis CI | travis | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| Vela | vela | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| Vercel | vercel | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :white_check_mark: | :x: |
| Wercker | wercker | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | :x: | :x: | :white_check_mark: | :white_check_mark: |
| JetBrains Space | jetbrainsSpace | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: | :x: | :x: | :x: | :x: | :x: | :x: | :white_check_mark: | :x: |
| Woodpecker CI | woodpecker | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
:warning: See Caveats
Note: Unsupported properties will always be undefined. For example if a Ci services doesn't support triggering
builds when a Pull Request is opened/updated, isPr will be undefined.
Note: If none of the above CI services is detected, commit and branch are determined based on the local Git
repository, and isCi is determined based on the CI environment variable.
Type: Object
Type: Object
Default: process.env
The object to read environment variables from.
Type: String
Default: process.cwd()
The current working directory in which to execute git commands used to determine the commit
and branch Result properties in case no supported CI is detected.
Type: Object
Environment variables values exposed by the CI service.
AWS CodeBuild doesn't provide an environment variable to determine the current Git branch being built. In addition, it
clones the repository in a detached head state so the branch
cannot be determined with git rev-parse --abbrev-ref HEAD.
To work around this limitation, env-ci look for the remote branches having the same HEAD as the local
detached HEAD to determine the branch from which the detached HEAD was created.
In the rare case where there is multiple remote branches with the same HEAD as the local detached HEAD, env-ci
will arbitrarily pick the first one. This can lead to an inaccurate branch value in such circumstances.
For builds triggered when a Pull Request is opened/updated, CircleCI doesn't provide an environment variable indicating
the target branch.
Therefore, in the case of Pull Request builds, env-ci will not be able to determine the branch property.
However prBranch will be set.
See feature request.
For builds triggered when a Pull Request is opened/updated, Cloudflare Pages will re-use the branch variable for the
originating branch and not provide a target. Therefore env-ci will not be able to determine the prBranch property
however branch will always be set.
Triggering build when a Pull Request is opened/updated is supported only via
the ghprb-plugin
and gitlab-plugin. Therefore env-ci will set isPr, pr and prBranch
and define branch with the Pull Request target branch only if one those plugin is used.
For builds triggered when a Pull Request is opened/updated, Netlify doesn't provide an environment variable indicating
the target branch.
Therefore, in the case of Pull Request builds, env-ci will not be able to determine the branch property.
However prBranch will be set.
See feature request
For builds triggered when a Pull Request is opened/updated, Sail doesn't provide an environment variable indicating the
target branch, and the one for the current branch is set to pull/<PR number> independently of the the branch name from
which the Pull Request originated.
Therefore, in the case of Pull Request builds, env-ci will not be able to determine the branch and prBranch
properties.
For builds triggered when a Pull Request is opened/updated, Semaphore 1.0 doesn't provide an environment variable
indicating the target branch.
Therefore, in the case of Pull Request builds, env-ci will not be able to determine the branch property.
However prBranch will be set.
On Semaphore 2.0 the branch and prBranch properties will work as expected.
The property tag is only available on Semaphore 2.0.
For builds triggered when a Pull Request is opened/updated, Screwdriver sets the env.GIT_BRANCH as head:pr branch
type (Example:origin/refs/pull/1/head:pr) while at commit level (non PR) it does set it with the actual branch (Example: origin/main).
The ci-info package provides information about the current Continuous Integration environment. It can detect various CI services and provide details such as the service name and whether the code is running in a CI environment. Compared to env-ci, ci-info is more focused on providing basic CI detection without additional configuration options.
The ci-env package is another tool for detecting the CI environment. It provides information about the CI service, branch, and commit. Similar to env-ci, ci-env aims to provide detailed information about the CI environment, but it may not support as many CI services or custom configurations as env-ci.
FAQs
Get environment variables exposed by CI services
The npm package env-ci receives a total of 2,497,372 weekly downloads. As such, env-ci popularity was classified as popular.
We found that env-ci demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 4 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Socket for Jira lets teams turn alerts into Jira tickets with manual creation, automated ticketing rules, and two-way sync.

Company News
Socket won two 2026 Reppy Awards from RepVue, ranking in the top 5% of all sales orgs. AE Alexandra Lister shares what it's like to grow a sales career here.

Security News
NIST will stop enriching most CVEs under a new risk-based model, narrowing the NVD's scope as vulnerability submissions continue to surge.