如何在 Azure DevOps 中自动对 npm 包进行版本控制(不触发新管道)?
How to automatically version npm package in Azure DevOps (without triggering new pipeline)?
我们正在努力做什么
我们正在使用 Azure Pipelines (azure-pipelines.yml
) 来自动化 ci/cd。我们的部分配置完成了项目的版本控制,以便发布到 Azure Artifacts。我们还尝试将其配置为更新 package.json
中的现有版本号,而不触发 Azure DevOps 中的新管道。
这是我们 azure-pipelines.yml
文件的相关部分:
- script: |
git config --global user.email "email@example.com"
git config --global user.name "User name"
npm version patch -m "Bump version to %s [skip ci]" --force
displayName: 'Bump release version'
- script: |
npm pack
displayName: 'Package package'
这可以很好地将包发布到我们的 Azure Artifacts 提要,但不会更新 package.json
中的现有版本
我们的 package.json
包含以下内容:
"release": {
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
"@semantic-release/changelog",
[
"@semantic-release/npm",
{
"npmPublish": false
}
],
[
"@semantic-release/git",
{
"assets": [
"dist/",
"package.json",
"CHANGELOG.md"
],
"message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
}
]
]
}
问题
我们如何更新脚本以确保 package.json
中的 version
值也得到更新而不触发另一个管道执行(这将导致触发新管道执行的无限循环)?
您可以添加另一个脚本任务以推送回您的 devops git 存储库。但首先,您需要添加 checkout 步骤并将 persistCredentials 设置为 true 以验证 git 命令。请参阅以下示例:
- checkout: self
persistCredentials: true
- script: |
git config --global user.email "email@example.com"
git config --global user.name "User name"
npm version patch -m "Bump version to %s [skip ci]" --force
displayName: 'Bump release version'
- script: |
git push origin HEAD:$(Build.SourceBranchName)
displayName: 'Update Git Repo'
因为您在提交消息中有 [跳过 ci]。推回更新的 package.json 文件不会触发新的构建。参见 here。
我们正在努力做什么
我们正在使用 Azure Pipelines (azure-pipelines.yml
) 来自动化 ci/cd。我们的部分配置完成了项目的版本控制,以便发布到 Azure Artifacts。我们还尝试将其配置为更新 package.json
中的现有版本号,而不触发 Azure DevOps 中的新管道。
这是我们 azure-pipelines.yml
文件的相关部分:
- script: |
git config --global user.email "email@example.com"
git config --global user.name "User name"
npm version patch -m "Bump version to %s [skip ci]" --force
displayName: 'Bump release version'
- script: |
npm pack
displayName: 'Package package'
这可以很好地将包发布到我们的 Azure Artifacts 提要,但不会更新 package.json
我们的 package.json
包含以下内容:
"release": {
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
"@semantic-release/changelog",
[
"@semantic-release/npm",
{
"npmPublish": false
}
],
[
"@semantic-release/git",
{
"assets": [
"dist/",
"package.json",
"CHANGELOG.md"
],
"message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
}
]
]
}
问题
我们如何更新脚本以确保 package.json
中的 version
值也得到更新而不触发另一个管道执行(这将导致触发新管道执行的无限循环)?
您可以添加另一个脚本任务以推送回您的 devops git 存储库。但首先,您需要添加 checkout 步骤并将 persistCredentials 设置为 true 以验证 git 命令。请参阅以下示例:
- checkout: self
persistCredentials: true
- script: |
git config --global user.email "email@example.com"
git config --global user.name "User name"
npm version patch -m "Bump version to %s [skip ci]" --force
displayName: 'Bump release version'
- script: |
git push origin HEAD:$(Build.SourceBranchName)
displayName: 'Update Git Repo'
因为您在提交消息中有 [跳过 ci]。推回更新的 package.json 文件不会触发新的构建。参见 here。