1. 授权认证
  2. 获取用户个人信息
  3. 项目协同
  4. 代码托管
  5. 持续集成
  6. 制品仓库
  7. 测试管理
  8. 文档管理
  1. 项目协同
  2. 代码仓库
  3. DevOps 实践之旅
  4. 一分钟开始持续集成之旅
  5. 持续部署
  6. 制品库

构建 npm 类型制品

功能介绍

在 CODING 持续集成任务构建过程当中,您可以选择将构建物上传至 CODING 制品库。通过凭证信息,就可在持续集成中使用 npm 类型制品库。

Jenkinsfile 配置

想要在持续集成中向 CODING 制品库发布或下载 npm 包,需要在 .npmrc 中使用有效的拉取或者推送凭据,直接把凭据信息提交到代码仓库中又会有安全风险。

解决方法:npm 支持用户通过环境变量来读取配置,如:

registry=https://my-team-npm.pkg.coding.net/my-project/my-npm-repo/
always-auth=true
//my-team-npm.pkg.coding.net/my-project/my-npm-repo/:username=${NPM_USERNME}
//my-team-npm.pkg.coding.net/my-project/my-npm-repo/:_password=${NPM_PASSWORD_ENCODED}
//my-team-npm.pkg.coding.net/my-project/my-npm-repo/:email=required but not used

代码检出与制品上传的 Jenkinsfile 配置示例如下:

pipeline {
  agent any
  stages {
    stage('检出') {
      steps {
        // 请确保代码仓库内有 .npmrc 文件
        checkout([
          $class: 'GitSCM',
          branches: [[name: env.GIT_BUILD_REF]],
          userRemoteConfigs: [
            [url: env.GIT_REPO_URL, credentialsId: env.CREDENTIALS_ID]
          ]
        ])
      }
    }
    stage('上传到私有 npm') {
      steps {
          withCredentials([
            usernamePassword(
              // CODING 持续集成的环境变量中内置了一个用于上传到当前项目制品库的凭证
              credentialsId: env.CODING_ARTIFACTS_CREDENTIALS_ID,
              usernameVariable: 'NPM_USERNAME',
              passwordVariable: 'NPM_PASSWORD'
            )]) {
                // .npmrc 使用的 password 必须经过 base64 encode
                NPM_PASSWORD_ENCODED = sh (
                    script: 'echo -n "${NPM_PASSWORD}" | base64',
                    returnStdout: true
                )

                withEnv(["NPM_PASSWORD_ENCODED=${NPM_PASSWORD_ENCODED}"]){
                    sh 'npm publish'
                }
            }
          }
      }
  }
}
  • 若想将制品推送到本项目的制品库,使用 CODING 持续集成内置的 CODING_ARTIFACTS_CREDENTIALS_ID 即可。

  • 若想要从 A 项目的持续集成中推送到 B 项目的制品库中,需要您手动创建能够推送到 B 项目的凭据。

常见问题

  1. 如何找到 .npmrc 文件?
npm config list
  1. 如何创建凭据?
    点击查看:持续集成——使用凭据进行认证
上一篇构建 Maven 类型制品
最近更新
感谢反馈有用
感谢反馈没用

在阅读中是否遇到以下问题?

您希望我们如何改进?