0

我有一份詹金斯的工作,试图将一个 npm 包推送到一个私有的 aws 代码工件仓库。

这在我的机器上本地工作,但是当通过詹金斯运行时,这个错误出来了。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 调试日志,并且没有任何异常表明任何异常。

4

1 回答 1

0

我无法让它在我的设置中工作。最终最终在我的 Jenkins 文件中执行了此操作。在 env 部分中获取 Artifact auth 令牌:

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 作为存储库。

于 2021-03-16T06:45:29.010 回答