npm publish 没有使用私人 aws code-artifact repo

npm publish is not using private aws code-artifact repo

我有一项 jenkins 工作,试图将 npm 包推送到私有 aws 代码工件存储库。

这可以在我的机器上本地运行,但是当 运行 通过 jenkins 时会出现此错误。 jenkins 的设置是 运行 一个容器作为一个从站,其中安装了节点。这是我从笔记本电脑中发现的唯一区别。

这是构建日志: https://pastebin.com/fENQSG9w

+ cat -A /home/jenkins/.npmrc
registry=https://myorg-awsAccNo.d.codeartifact.us-east-1.amazonaws.com/npm/myrepo/$
//myorg-awsAccNo.d.codeartifact.us-east-1.amazonaws.com/npm/myrepo/:always-auth=true$
//myorg-awsAccNo.d.codeartifact.us-east-1.amazonaws.com/npm/myrepo/:_authToken=eyJ2ZXIiXXXXXXXXXxx2h99mC5RQp4El-0g$
+ cat -A .npmrc
cat: .npmrc: No such file or directory

我看到用于登录的 aws cli 有效,它还使用身份验证令牌在用户级别设置 .npmrc。 但是,在发布工件时,它会转到 https://registry.npmjs.org/@myscope%2ftest-poc-package 而不是 npm 代码工件位置。

从属容器内的 npm 版本为:6.14.11

我在 jenkins 作业中添加了一些步骤,以列出用户主目录和项目主目录中的 .npmrc 以及 npm 调试日志,其中 none 表明任何异常情况。

我无法在我的设置中使用它。 最终在我的 Jenkins 文件中完成了这个。 在 env 部分获取 Artifact 身份验证令牌:

environment {
        CODEARTIFACT_AUTH_TOKEN = sh(script: "aws codeartifact get-authorization-token --duration-seconds 0 --domain mydomain --domain-owner xxxxxxxx --query authorizationToken --output text --endpoint-url https://vpce-xxxxxxx-xxxxxxx.api.codeartifact.us-east-1.vpce.amazonaws.com" , returnStdout: true).trim()
    }

然后将其添加为构建步骤的一部分

stage('Build and Publish'){
  steps{
        sh '''
            npm config set registry 'https://mydomain-xxxxxxxxx.d.codeartifact.us-east-1.amazonaws.com/npm/myrepo/'
            npm config set '//mydomain-xxxxxxxxx.d.codeartifact.us-east-1.amazonaws.com/npm/myrepo/:always-auth' 'true'
            npm config set '//mydomain-xxxxxxxxx.d.codeartifact.us-east-1.amazonaws.com/npm/myrepo/:_authToken' '${CODEARTIFACT_AUTH_TOKEN}'
        '''
        sh  'npm run build'
        sh  'npm publish'
      }
  }

这有助于设置存储库及其令牌,我能够让 npm 使用 AWS CodeArtifact 作为存储库。