Every so often a project needs a reliable way to check two aspects when building / testing:
Apologies if this issue is raised in the wrong spot (maybe (1) and (2) should be raised on a different repo?).
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?
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=trueCIRCLECI=trueAPPVEYOR=trueCan we add something like AZURE_PIPELINES=true as a default environment variable to all image?
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 (?)
AGENT.JOBSTATUS an accident? (AGENT_JOBSTATUS also is exported)~ This is documented, it is kept for backwards compatibility...sorry x0AZURE_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.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.JOBSTATUSAGENT_BUILDDIRECTORYAGENT_DISABLELOGPLUGIN_TESTFILEPUBLISHERPLUGINAGENT_DISABLELOGPLUGIN_TESTRESULTLOGPLUGINAGENT_HOMEDIRECTORYAGENT_IDAGENT_JOBNAMEAGENT_JOBSTATUSAGENT_MACHINENAMEAGENT_NAMEAGENT_OSAGENT_OSARCHITECTUREAGENT_RETAINDEFAULTENCODINGAGENT_ROOTDIRECTORYAGENT_SERVEROMDIRECTORYAGENT_TEMPDIRECTORYAGENT_TOOLSDIRECTORYAGENT_VERSIONAGENT_WORKFOLDERALLUSERSPROFILEANDROID_HOMEANDROID_NDK_HOMEANDROID_NDK_PATHANT_HOMEAPPDATAAZURE_HTTP_USER_AGENTBOOST_ROOTBOOST_ROOT_1_69_0BUILD_ARTIFACTSTAGINGDIRECTORYBUILD_BINARIESDIRECTORYBUILD_BUILDIDBUILD_BUILDNUMBERBUILD_BUILDURIBUILD_CONTAINERIDBUILD_DEFINITIONNAMEBUILD_DEFINITIONVERSIONBUILD_QUEUEDBYBUILD_QUEUEDBYIDBUILD_REASONBUILD_REPOSITORY_CLEANBUILD_REPOSITORY_GIT_SUBMODULECHECKOUTBUILD_REPOSITORY_IDBUILD_REPOSITORY_LOCALPATHBUILD_REPOSITORY_NAMEBUILD_REPOSITORY_PROVIDERBUILD_REPOSITORY_URIBUILD_REQUESTEDFORBUILD_REQUESTEDFOREMAILBUILD_REQUESTEDFORIDBUILD_SOURCEBRANCHBUILD_SOURCEBRANCHNAMEBUILD_SOURCESDIRECTORYBUILD_SOURCEVERSIONBUILD_SOURCEVERSIONAUTHORBUILD_SOURCEVERSIONMESSAGEBUILD_STAGINGDIRECTORYCHOCOLATEYINSTALLCHROMEWEBDRIVERCOBERTURA_HOMECOMMANDPROMPTTYPECOMMONPROGRAMFILESCOMMONPROGRAMFILES(X86)COMMONPROGRAMW6432COMMON_TESTRESULTSDIRECTORYCOMPUTERNAMECOMSPECCONDADEVENVDIREXTENSIONSDKDIRFRAMEWORK40VERSIONFRAMEWORKDIRFRAMEWORKDIR64FRAMEWORKVERSIONFRAMEWORKVERSION64FSHARPINSTALLDIRGECKOWEBDRIVERGIT_TERMINAL_PROMPTGOROOTGOROOT_1_10_X64GOROOT_1_11_X64GOROOT_1_12_X64GOROOT_1_9_X64GRADLE_HOMEHOMEDRIVEHOMEPATHHTMLHELPDIRIEWEBDRIVERIFCPATHINCLUDEJAVA_HOMEJAVA_HOME_11_X64JAVA_HOME_8_X64LIBLIBPATHLOCALAPPDATALOGONSERVERM2M2_HOMEM2_REPOMAVEN_OPTSMSDEPLOY_HTTP_USER_AGENTMSMPI_BINNETFXSDKDIRNPM_CONFIG_CACHENPM_CONFIG_PREFIXNUMBER_OF_PROCESSORSOSPATHPATHEXTPHPROOTPIPELINE_WORKSPACEPLATFORMPROCESSOR_ARCHITECTUREPROCESSOR_IDENTIFIERPROCESSOR_LEVELPROCESSOR_REVISIONPROGRAMDATAPROGRAMFILESPROGRAMFILES(X86)PROGRAMW6432PROMPTPSEXECUTIONPOLICYPREFERENCEPSMODULEPATHPUBLICPYTHON_HOMESYSTEMSYSTEMDRIVESYSTEMROOTSYSTEM_ARTIFACTSDIRECTORYSYSTEM_COLLECTIONIDSYSTEM_COLLECTIONURISYSTEM_CULTURESYSTEM_DEBUGSYSTEM_DEFAULTWORKINGDIRECTORYSYSTEM_DEFINITIONIDSYSTEM_DEFINITIONNAMESYSTEM_ENABLEACCESSTOKENSYSTEM_HOSTTYPESYSTEM_ISSCHEDULEDSYSTEM_JOBATTEMPTSYSTEM_JOBDISPLAYNAMESYSTEM_JOBIDSYSTEM_JOBIDENTIFIERSYSTEM_JOBNAMESYSTEM_JOBPARALLELISMTAGSYSTEM_JOBPOSITIONINPHASESYSTEM_PHASEDISPLAYNAMESYSTEM_PHASEIDSYSTEM_PHASENAMESYSTEM_PIPELINESTARTTIMESYSTEM_PLANIDSYSTEM_PULLREQUEST_ISFORKSYSTEM_PULLREQUEST_MERGEDATSYSTEM_PULLREQUEST_PULLREQUESTIDSYSTEM_PULLREQUEST_PULLREQUESTNUMBERSYSTEM_PULLREQUEST_SOURCEBRANCHSYSTEM_PULLREQUEST_SOURCECOMMITIDSYSTEM_PULLREQUEST_SOURCEREPOSITORYURISYSTEM_PULLREQUEST_TARGETBRANCHSYSTEM_SERVERTYPESYSTEM_TASKDEFINITIONSURISYSTEM_TASKDISPLAYNAMESYSTEM_TASKINSTANCEIDSYSTEM_TASKINSTANCENAMESYSTEM_TEAMFOUNDATIONCOLLECTIONURISYSTEM_TEAMFOUNDATIONSERVERURISYSTEM_TEAMPROJECTSYSTEM_TEAMPROJECTIDSYSTEM_TIMELINEIDSYSTEM_TOTALJOBSINPHASESYSTEM_WORKFOLDERTASK_DISPLAYNAMETEMPTF_BUILDTMPUCRTVERSIONUNIVERSALCRTSDKDIRUSERDOMAINUSERDOMAIN_ROAMINGPROFILEUSERNAMEVCIDEINSTALLDIRVCINSTALLDIRVCPKG_INSTALLATION_ROOTVCTOOLSINSTALLDIRVCTOOLSREDISTDIRVCTOOLSVERSIONVISUALSTUDIOVERSIONVS140COMNTOOLSVS150COMNTOOLSVSCMD_ARG_APP_PLATVSCMD_ARG_HOST_ARCHVSCMD_ARG_TGT_ARCHVSCMD_VERVSINSTALLDIRVSSDK150INSTALLVSTS_AGENT_PERFLOGVSTS_PROCESS_LOOKUP_IDWINDIRWINDOWSLIBPATHWINDOWSSDKBINPATHWINDOWSSDKDIRWINDOWSSDKLIBVERSIONWINDOWSSDKVERBINPATHWINDOWSSDKVERSIONWINDOWSSDK_EXECUTABLEPATH_X64WINDOWSSDK_EXECUTABLEPATH_X86WIX__DOTNET_ADD_64BIT__DOTNET_PREFERRED_BITNESS__VSCMD_PREINIT_PATH⚠Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.
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...
BUILD_REASONTF_BUILDTF_BUILDHi 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.