Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Use this task to provide npm credentials to an .npmrc file in your repository for the scope of the build. This enables npm, as well as npm task runners like gulp and Grunt, to authenticate with private registries.
Syntax
# npm Authenticate (for task runners) v0
# Don't use this task if you're also using the npm task. Provides npm credentials to an .npmrc file in your repository for the scope of the build. This enables npm task runners like Gulp and Grunt to authenticate with private registries.
- task: npmAuthenticate@0
inputs:
#workingFile: # string. .npmrc file to authenticate.
#customEndpoint: # string. Credentials for registries outside this account/collection.
Inputs
workingFile - .npmrc file to authenticate
string.
The path to the .npmrc file that specifies the registries you want to work with. Select the file, not the folder, such as /packages/mypackage.npmrc.
customEndpoint - Credentials for registries outside this account/collection
string.
The comma-separated list of npm service connection names for registries outside this organization or collection. The specified .npmrc file must contain registry entries corresponding to the service connections. If you only need registries in this organization or collection, leave this blank. The build's credentials are used automatically.
Task control options
All tasks have control options in addition to their task inputs. For more information, see Control options and common task properties.
Output variables
None.
Remarks
Use this task to provide npm credentials to an .npmrc file in your repository for the scope of the build. This enables npm, as well as npm task runners like gulp and Grunt, to authenticate with private registries.
- How does this task work?
- When in my pipeline should I run this task?
- I have multiple npm projects. Do I need to run this task for each .npmrc file?
- My agent is behind a web proxy. Will
npmAuthenticateset upnpm/gulp/Gruntto use my proxy? - My Pipeline needs to access a feed in a different project
How does this task work?
This task searches the specified .npmrc file for registry entries, then appends authentication details for the discovered registries to the end of the file. For all registries in the current organization/collection, the build's credentials are used. For registries in a different organization or hosted by a third-party, the registry URIs will be compared to the URIs of the npm service connections specified by the customEndpoint input, and the corresponding credentials will be used. The .npmrc file will be reverted to its original state at the end of the pipeline execution.
When in my pipeline should I run this task?
This task must run before you use npm, or an npm task runner, to install or push packages to an authenticated npm repository such as Azure Artifacts. There are no other ordering requirements.
I have multiple npm projects. Do I need to run this task for each .npmrc file?
This task will only add authentication details to one .npmrc file at a time. If you need authentication for multiple .npmrc files, you can run the task multiple times, once for each .npmrc file. Alternately, consider creating an .npmrc file that specifies all registries used by your projects, running npmAuthenticate on this .npmrc file, and then setting an environment variable to designate this .npmrc file as the npm per-user configuration file.
- task: npmAuthenticate@0
inputs:
workingFile: $(agent.tempdirectory)/.npmrc
- script: echo ##vso[task.setvariable variable=NPM_CONFIG_USERCONFIG]$(agent.tempdirectory)/.npmrc
- script: npm ci
workingDirectory: project1
- script: npm ci
workingDirectory: project2
My agent is behind a web proxy. Will npmAuthenticate set up npm/gulp/Grunt to use my proxy?
The answer is no. While this task itself will work behind a web proxy your agent has been configured to use, it does not configure npm or npm task runners to use the proxy.
To do so, you can either:
Set the environment variables
http_proxy/https_proxyand optionallyno_proxyto your proxy settings. See npm config for details. Note that these are commonly used variables which other non-npmtools (e.g. curl) may also use.Add the proxy settings to the npm configuration, either manually, by using npm config set, or by setting environment variables prefixed with
NPM_CONFIG_.Caution:
npmtask runners may not be compatible with all methods of proxy configuration supported bynpm.Specify the proxy with a command line flag when calling
npm.- script: npm ci --https-proxy $(agent.proxyurl)
If your proxy requires authentication, you may need to add an additional build step to construct an authenticated proxy URI.
- script: node -e "let u = url.parse(`$(agent.proxyurl)`); u.auth = `$(agent.proxyusername):$(agent.proxypassword)`; console.log(`##vso[task.setvariable variable=proxyAuthUri;issecret=true]` + url.format(u))"
- script: npm publish --https-proxy $(proxyAuthUri)
My Pipeline needs to access a feed in a different project
If the pipeline is running in a different project than the project hosting the feed, you must set up the other project to grant read/write access to the build service. See Package permissions in Azure Pipelines for more details.
Examples
- Restore
npmpackages for your project from a registry within your organization - Restore and publish
npmpackages outside your organization - npmrc
- npm
Restore npm packages for your project from a registry within your organization
If the only authenticated registries you use are Azure Artifacts registries in your organization, you only need to specify the path to an .npmrc file to the npmAuthenticate task.
.npmrc
registry=https://pkgs.dev.azure.com/{organization}/_packaging/{feed}/npm/registry/
always-auth=true
npm
- task: npmAuthenticate@0
inputs:
workingFile: .npmrc
- script: npm ci
# ...
- script: npm publish
Restore and publish npm packages outside your organization
If your .npmrc contains Azure Artifacts registries from a different organization or use a third-party authenticated package repository, you'll need to set up npm service connections and specify them in the customEndpoint input.
Registries within your Azure Artifacts organization will also be automatically authenticated.
.npmrc
registry=https://pkgs.dev.azure.com/{organization}/{project}/_packaging/{feed}/npm/registry/
@{scope}:registry=https://pkgs.dev.azure.com/{otherorganization}/_packaging/{feed}/npm/registry/
@{otherscope}:registry=https://{thirdPartyRepository}/npm/registry/
always-auth=true
The registry URL pointing to an Azure Artifacts feed may or may not contain the project. An URL for a project scoped feed must contain the project, and the URL for an organization scoped feed must not contain the project. Learn more about project scoped feeds.
npm
- task: npmAuthenticate@0
inputs:
workingFile: .npmrc
customEndpoint: OtherOrganizationNpmConnection, ThirdPartyRepositoryNpmConnection
- script: npm ci
# ...
- script: npm publish -registry https://pkgs.dev.azure.com/{otherorganization}/_packaging/{feed}/npm/registry/
OtherOrganizationNpmConnection and ThirdPartyRepositoryNpmConnection are the names of npm service connections that have been configured and authorized for use in your pipeline, and have URLs that match those in the specified .npmrc file.
Requirements
| Requirement | Description |
|---|---|
| Pipeline types | YAML, Classic build, Classic release |
| Runs on | Agent, DeploymentGroup |
| Demands | None |
| Capabilities | This task does not satisfy any demands for subsequent tasks in the job. |
| Command restrictions | Any |
| Settable variables | Any |
| Agent version | 2.115.0 or greater |
| Task category | Package |