0

我正在研究一个新项目的 azuredevops 管道。我对devops完全陌生。

在这个项目中,我想使用 lerna.js 来管理我的 monorepo 和我的包。

考虑到我的 monorepo 中有这三个项目:

  • 包 1 (1.0.1)
  • 包 2 (1.0.0)
  • 包 3 (1.0.3)

我想创建一个新的 TAG,它将包 3 增加到(1.0.4)。我怎样才能触发 Azure Pipeline 仅用于包 3?有指南吗?

我看了一篇关于 lerna.js的 monorepos 的演讲,我试图弄清楚 Azure Pipelines 是否有一个类似于 Sail CI 的功能。在示例中,我们有这个方法:

tasks:
  build-package-1:
    image: sailci/demo
    when:
      paths:
        - "packages/package-1/**/*"

我工作的公司正在使用 Azure DevOps,如果我可以在那里拥有该功能,那就太棒了。

4

2 回答 2

1

与此类似的最接近的事情是@Simon Ness 使用路径过滤器编写了多个管道。此外,如果您的包具有相似的结构并且需要相同的步骤来创建/测试/发布包,您应该考虑使用模板

像您描述的 conspet toi 处理包可以类似于以下步骤。

模板.yaml

parameters:
- name: workingDir 
  type: string
  default: package-1

steps:
- script: npm install
  workingDiretory: ${{ parameters.workingDir }}
- script: yarn install
  workingDiretory: ${{ parameters.workingDir }}
- script: npm run compile
  workingDiretory: ${{ parameters.workingDir }}

然后 Package-1 的管道可能如下所示:


trigger:
  branches:
    include:
    - master
    - releases/*
  paths:
    include:
    - Package-1/*


steps:
- template: templates/template.yaml
  parameters:
    workingDir: Package-1

对于包 2:


trigger:
  branches:
    include:
    - master
    - releases/*
  paths:
    include:
    - Package-2/*

steps:
- template: templates/template.yaml
  parameters:
    workingDir: Package-2

编辑

对于标签部分,您需要做的就是更改触发器部分:

trigger:
  branches:
    include:
    - master
    - refs/tags/*

当您创建标签并推送它时:

git tag release-05
git push origin --tags

您的管道将开始:

Azure DevOps 发布视图

但是,触发器的工作方式类似于 or 条件,因此对于 master 或 new tag piepline 的任何更改都将开始。因此,如果您标记另一个分支(不是主)管道将启动。

这就是为什么您可能需要检查您的源分支是否来自触发器部分的原因:


trigger:
  branches:
    include:
    - master
    - refs/tags/*

stages:
- stage: A
  condition: eq(variables['Build.SourceBranch'], 'master')
  jobs:
  - job: JA
    steps:
    - script: |
        echo "This is job Foo."

以上管道将运行:

  • master分支的变化
  • 推送到服务器的任何标签,但仅当您将标签推送到主分支时它才会运行阶段 A
于 2020-05-13T22:29:01.013 回答
0

如果您乐于为每个包定义单独的管道,请查看CI触发器中的路径

- refs/tags/*通过在触发器部分中包含分支,标签可以用作触发器。

于 2020-05-13T19:35:38.027 回答