Azure-devops-docs: add "signal" environment variables, document a suggested way of detecting Azure Pipelines specifically

Created on 23 Apr 2019  Â·  5Comments  Â·  Source: MicrosoftDocs/azure-devops-docs

Every so often a project needs a reliable way to check two aspects when building / testing:

  1. Is this project running on CI in general? (feature request)
  2. Is this project running on a specific CI provider? (feature request)
  3. Currently, how can I reliably verify I am running on Azure Pipelines? (guidance request)

Apologies if this issue is raised in the wrong spot (maybe (1) and (2) should be raised on a different repo?).

1. Is this project running on CI in general?

Most providers supply a CI environment variable, which is generally understood to be "CI is running in some form".

Can we add CI=true as a default environment variable to all images?

2. Is this project running on a specific CI provider?

Most providers also supply a vendor specific environment variable to enable users to detect e.g., "Am I running on [ travis / circleci / azure pipelines / etc]?". This is helpful for "turn-key" build scripts etc. (links above for respective variables, inlined here for convenience):

  • Travis CI: TRAVIS=true
  • CircleCI: CIRCLECI=true
  • AppVeyor: APPVEYOR=true

Can we add something like AZURE_PIPELINES=true as a default environment variable to all image?

3. Currently, how can I reliably verify I am running on Azure Pipelines?

The mapping from the documented variables to the exported environment variables is not officially documented. It seems to basically just be var -> uppercase -> replace . with _, with some exceptions (?)

  • ~Is AGENT.JOBSTATUS an accident? (AGENT_JOBSTATUS also is exported)~ This is documented, it is kept for backwards compatibility...sorry x0
  • Can I rely on AZURE_HTTP_USER_AGENT always being set (even if it is the empty string)? This is the only one with an AZURE_ prefix, making it my preference over something like AGENT_* or BUILD_* since it's a little clearer.

    • AZURE_HTTP_USER_AGENT seems to come from something that may or may not be getting phased out in favor of Azure CLI 2.0, which is why I'm concerned about relying on it.

    • If AZURE_HTTP_USER_AGENT is getting phased out, is there a suggested variable from below (e.g., AGENT_NAME or BUILD_REASON or something)?

I'm happy to add a PR to the docs if (1) and (2) are done. It's a small change, but even if they are incorporated in the future it will take some time for it to actually hit production. So I'm just looking for help on a band-aid solution (assuming (1) and (2) are getting incorporated).

Thanks for reading / any help, and for azure pipelines :heart:

Included below are the current environment variables exported for the vs2017 build agent for convenience.

  • AGENT.JOBSTATUS
  • AGENT_BUILDDIRECTORY
  • AGENT_DISABLELOGPLUGIN_TESTFILEPUBLISHERPLUGIN
  • AGENT_DISABLELOGPLUGIN_TESTRESULTLOGPLUGIN
  • AGENT_HOMEDIRECTORY
  • AGENT_ID
  • AGENT_JOBNAME
  • AGENT_JOBSTATUS
  • AGENT_MACHINENAME
  • AGENT_NAME
  • AGENT_OS
  • AGENT_OSARCHITECTURE
  • AGENT_RETAINDEFAULTENCODING
  • AGENT_ROOTDIRECTORY
  • AGENT_SERVEROMDIRECTORY
  • AGENT_TEMPDIRECTORY
  • AGENT_TOOLSDIRECTORY
  • AGENT_VERSION
  • AGENT_WORKFOLDER
  • ALLUSERSPROFILE
  • ANDROID_HOME
  • ANDROID_NDK_HOME
  • ANDROID_NDK_PATH
  • ANT_HOME
  • APPDATA
  • AZURE_HTTP_USER_AGENT
  • BOOST_ROOT
  • BOOST_ROOT_1_69_0
  • BUILD_ARTIFACTSTAGINGDIRECTORY
  • BUILD_BINARIESDIRECTORY
  • BUILD_BUILDID
  • BUILD_BUILDNUMBER
  • BUILD_BUILDURI
  • BUILD_CONTAINERID
  • BUILD_DEFINITIONNAME
  • BUILD_DEFINITIONVERSION
  • BUILD_QUEUEDBY
  • BUILD_QUEUEDBYID
  • BUILD_REASON
  • BUILD_REPOSITORY_CLEAN
  • BUILD_REPOSITORY_GIT_SUBMODULECHECKOUT
  • BUILD_REPOSITORY_ID
  • BUILD_REPOSITORY_LOCALPATH
  • BUILD_REPOSITORY_NAME
  • BUILD_REPOSITORY_PROVIDER
  • BUILD_REPOSITORY_URI
  • BUILD_REQUESTEDFOR
  • BUILD_REQUESTEDFOREMAIL
  • BUILD_REQUESTEDFORID
  • BUILD_SOURCEBRANCH
  • BUILD_SOURCEBRANCHNAME
  • BUILD_SOURCESDIRECTORY
  • BUILD_SOURCEVERSION
  • BUILD_SOURCEVERSIONAUTHOR
  • BUILD_SOURCEVERSIONMESSAGE
  • BUILD_STAGINGDIRECTORY
  • CHOCOLATEYINSTALL
  • CHROMEWEBDRIVER
  • COBERTURA_HOME
  • COMMANDPROMPTTYPE
  • COMMONPROGRAMFILES
  • COMMONPROGRAMFILES(X86)
  • COMMONPROGRAMW6432
  • COMMON_TESTRESULTSDIRECTORY
  • COMPUTERNAME
  • COMSPEC
  • CONDA
  • DEVENVDIR
  • EXTENSIONSDKDIR
  • FRAMEWORK40VERSION
  • FRAMEWORKDIR
  • FRAMEWORKDIR64
  • FRAMEWORKVERSION
  • FRAMEWORKVERSION64
  • FSHARPINSTALLDIR
  • GECKOWEBDRIVER
  • GIT_TERMINAL_PROMPT
  • GOROOT
  • GOROOT_1_10_X64
  • GOROOT_1_11_X64
  • GOROOT_1_12_X64
  • GOROOT_1_9_X64
  • GRADLE_HOME
  • HOMEDRIVE
  • HOMEPATH
  • HTMLHELPDIR
  • IEWEBDRIVER
  • IFCPATH
  • INCLUDE
  • JAVA_HOME
  • JAVA_HOME_11_X64
  • JAVA_HOME_8_X64
  • LIB
  • LIBPATH
  • LOCALAPPDATA
  • LOGONSERVER
  • M2
  • M2_HOME
  • M2_REPO
  • MAVEN_OPTS
  • MSDEPLOY_HTTP_USER_AGENT
  • MSMPI_BIN
  • NETFXSDKDIR
  • NPM_CONFIG_CACHE
  • NPM_CONFIG_PREFIX
  • NUMBER_OF_PROCESSORS
  • OS
  • PATH
  • PATHEXT
  • PHPROOT
  • PIPELINE_WORKSPACE
  • PLATFORM
  • PROCESSOR_ARCHITECTURE
  • PROCESSOR_IDENTIFIER
  • PROCESSOR_LEVEL
  • PROCESSOR_REVISION
  • PROGRAMDATA
  • PROGRAMFILES
  • PROGRAMFILES(X86)
  • PROGRAMW6432
  • PROMPT
  • PSEXECUTIONPOLICYPREFERENCE
  • PSMODULEPATH
  • PUBLIC
  • PYTHON_HOME
  • SYSTEM
  • SYSTEMDRIVE
  • SYSTEMROOT
  • SYSTEM_ARTIFACTSDIRECTORY
  • SYSTEM_COLLECTIONID
  • SYSTEM_COLLECTIONURI
  • SYSTEM_CULTURE
  • SYSTEM_DEBUG
  • SYSTEM_DEFAULTWORKINGDIRECTORY
  • SYSTEM_DEFINITIONID
  • SYSTEM_DEFINITIONNAME
  • SYSTEM_ENABLEACCESSTOKEN
  • SYSTEM_HOSTTYPE
  • SYSTEM_ISSCHEDULED
  • SYSTEM_JOBATTEMPT
  • SYSTEM_JOBDISPLAYNAME
  • SYSTEM_JOBID
  • SYSTEM_JOBIDENTIFIER
  • SYSTEM_JOBNAME
  • SYSTEM_JOBPARALLELISMTAG
  • SYSTEM_JOBPOSITIONINPHASE
  • SYSTEM_PHASEDISPLAYNAME
  • SYSTEM_PHASEID
  • SYSTEM_PHASENAME
  • SYSTEM_PIPELINESTARTTIME
  • SYSTEM_PLANID
  • SYSTEM_PULLREQUEST_ISFORK
  • SYSTEM_PULLREQUEST_MERGEDAT
  • SYSTEM_PULLREQUEST_PULLREQUESTID
  • SYSTEM_PULLREQUEST_PULLREQUESTNUMBER
  • SYSTEM_PULLREQUEST_SOURCEBRANCH
  • SYSTEM_PULLREQUEST_SOURCECOMMITID
  • SYSTEM_PULLREQUEST_SOURCEREPOSITORYURI
  • SYSTEM_PULLREQUEST_TARGETBRANCH
  • SYSTEM_SERVERTYPE
  • SYSTEM_TASKDEFINITIONSURI
  • SYSTEM_TASKDISPLAYNAME
  • SYSTEM_TASKINSTANCEID
  • SYSTEM_TASKINSTANCENAME
  • SYSTEM_TEAMFOUNDATIONCOLLECTIONURI
  • SYSTEM_TEAMFOUNDATIONSERVERURI
  • SYSTEM_TEAMPROJECT
  • SYSTEM_TEAMPROJECTID
  • SYSTEM_TIMELINEID
  • SYSTEM_TOTALJOBSINPHASE
  • SYSTEM_WORKFOLDER
  • TASK_DISPLAYNAME
  • TEMP
  • TF_BUILD
  • TMP
  • UCRTVERSION
  • UNIVERSALCRTSDKDIR
  • USERDOMAIN
  • USERDOMAIN_ROAMINGPROFILE
  • USERNAME
  • VCIDEINSTALLDIR
  • VCINSTALLDIR
  • VCPKG_INSTALLATION_ROOT
  • VCTOOLSINSTALLDIR
  • VCTOOLSREDISTDIR
  • VCTOOLSVERSION
  • VISUALSTUDIOVERSION
  • VS140COMNTOOLS
  • VS150COMNTOOLS
  • VSCMD_ARG_APP_PLAT
  • VSCMD_ARG_HOST_ARCH
  • VSCMD_ARG_TGT_ARCH
  • VSCMD_VER
  • VSINSTALLDIR
  • VSSDK150INSTALL
  • VSTS_AGENT_PERFLOG
  • VSTS_PROCESS_LOOKUP_ID
  • WINDIR
  • WINDOWSLIBPATH
  • WINDOWSSDKBINPATH
  • WINDOWSSDKDIR
  • WINDOWSSDKLIBVERSION
  • WINDOWSSDKVERBINPATH
  • WINDOWSSDKVERSION
  • WINDOWSSDK_EXECUTABLEPATH_X64
  • WINDOWSSDK_EXECUTABLEPATH_X86
  • WIX
  • __DOTNET_ADD_64BIT
  • __DOTNET_PREFERRED_BITNESS
  • __VSCMD_PREINIT_PATH

Document Details

⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

Pri1 devops-cictech devopprod doc-bug product-feedback

All 5 comments

Note that apparently the build environment changed within the last week, the above listing of environment variables is no longer accurate. E.g., VCTOOLSINSTALLDIR is now gone.

python -c "import os; print('\n'.join('{}{}:\n    {}'.format('*'*22, k, v) for k, v in os.environ.items()))"

That's a quick / dirty way to print out all of the environment keys / values for anybody who needs to check...

  1. Is this project running on CI in general?

    • Suggestion: Use BUILD_REASON

  2. Is this project running on a specific CI provider?

    • Suggestion: TF_BUILD

  3. Currently, how can I reliably verify I am running on Azure Pipelines?

    • Suggestion: TF_BUILD

Hi Chad,

Thanks for the suggestions. (2) and (3) work, I'll update my detection mechanisms -- thanks for identifying the best variable choice :slightly_smiling_face:

For (1) though, BUILD_REASON doesn't quite fit the bill, that's only on Azure Pipelines. (1) would best be solved via CI=true, which seems to be a convention at least among a handful of providers.

Thanks for your question. It looks like your question isn't an issue with the documentation, but an issue or question specific to your implementation or a bug in the product itself.

For help with a specific task, here are a couple of options where you might consider asking your question:

If you've encountered an issue with the product itself, to make sure it gets in front of the right people, please submit your bug here.

If you have an idea for improving the product, please submit your idea here.

Cross linking this because this issue is way more prevalent in search results.

https://developercommunity.visualstudio.com/idea/650862/add-a-new-predefined-variable-called-ci-with-value.html

Was this page helpful?
0 / 5 - 0 ratings

Related issues

Naphier picture Naphier  Â·  3Comments

sevaa picture sevaa  Â·  3Comments

dtamai picture dtamai  Â·  3Comments

csutorasr picture csutorasr  Â·  3Comments

EM1L picture EM1L  Â·  3Comments