.npmrc
我有一个带有私有 npm 注册 URL 的项目级别
registry=https://blabla.pkgs.visualstudio.com/_packaging/BlaBla/npm/registry/
always-auth=true
我的 Azure 管道有此阶段,使用其内置任务进行 npm 安装
- task: Npm@1
displayName: "NPM Install"
inputs:
command: custom
workingDir: ./project/ #this is the project folder, has package.json, npmrc files
customCommand: install
verbose: true
现在一切正常,软件包也已安装。我认为身份验证令牌存储在某个全局 .npmrc 文件中
问题
由于合规性问题,我无法存储硬编码的 URL,.npmrc
因为它已被提交并被代码分析工具扫描和投诉。
我尝试以
某种方式将其设置为环境变量
方法 1
我编辑了我的项目级别
npmrc
registry=$REGISTRY
always-auth=true
并在安装之前写了一个 bash 阶段
- bash: |
export NPM_CONFIG_REGISTRY=https://blabla.pkgs.visualstudio.com/_packaging/BlaBla/npm/registry/
echo $NPM_CONFIG_REGISTRY #hardcoded in pipeline for testing
displayName: "Set NPM Registry"
workingDir: $(Build.SourcesDirectory)/project/
这在管道中不起作用,并给出了npm ERR! code ERR_INVALID_URL
。
当我在本地尝试时,它似乎全局添加了注册表 URL,因为当我使用npm config get registry
它进行测试时,打印了 URL,我只是在项目文件夹级别(具有项目级别 npmrc)和项目文件夹外部设置了 URL。我还测试了 URL 是否硬编码,并npm config get registry
在项目文件夹中打印了正确的 URL,并在项目文件夹外部打印了https://registry.npmjs.org/
。但在本地它npm install
可以工作,但可能是由于错误的原因,因为它也给出了这个
npm WARN invalid config registry="$REGISTRY" set in C:\BlaBla\project\.npmrc
npm WARN invalid config Must be full url with "http://"
因此,总而言之,我认为项目级注册表 URL 从未在本地设置过,但我不知道为什么 Azure 管道甚至没有这么接近。我猜是因为 Npm 任务在不同的终端/会话中运行,所以它不知道我刚刚设置的环境变量
- 方法 2
我没有设置环境,而是编辑了安装自定义命令
customCommand: install --registry https://blabla.pkgs.visualstudio.com/_packaging/BlaBla/npm/registry/
现在我也得到了同样的结果npm WARN
,但这次我得到的不是无效的 URL 错误
npm ERR! code E401
npm ERR! Unable to authenticate, your authentication token seems to be invalid.
这个问题困扰了我好几个小时。所以任何帮助或指导都非常感谢。提前谢谢!