Azure devops 使用Lerna.js和Azure Devops管道

Azure devops 使用Lerna.js和Azure Devops管道,azure-devops,azure-pipelines,lerna,azure-pipelines-yaml,Azure Devops,Azure Pipelines,Lerna,Azure Pipelines Yaml,我正在研究azuredevops管道到一个新项目。我对devops一无所知 在这个项目中,我想使用lerna.js来管理我的monorepo和我的包 考虑到我的monorepo中有三个项目: 包1(1.0.1) 包2(1.0.0) 包3(1.0.3) 我想创建一个新标记,它将包3增加到(1.0.4)。我如何触发Azure管道,只发送到包3?有导游吗 我看了lerna.js,我试图弄清楚Azure管道是否有一个类似于Sail CI的功能。在示例中,我们有以下方法: tasks: build

我正在研究azuredevops管道到一个新项目。我对devops一无所知

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

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

  • 包1(1.0.1)
  • 包2(1.0.0)
  • 包3(1.0.3)
我想创建一个新标记,它将包3增加到(1.0.4)。我如何触发Azure管道,只发送到包3?有导游吗

我看了lerna.js,我试图弄清楚Azure管道是否有一个类似于Sail CI的功能。在示例中,我们有以下方法:

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

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

如果您愿意为每个包定义一个单独的管道,请查看CI


通过将分支
-refs/Tags/*
包含在触发器部分,可以将标记用作触发器。

与此类似的最接近的东西是@Simon Ness编写了多个管道。此外,如果您的包具有相似的结构,并且需要相同的步骤来创建/测试/发布包,则应该考虑。 如您所述的conspet toi处理包可以类似于以下步骤

模板yaml

参数:
-姓名:workingDir
类型:字符串
默认值:package-1
步骤:
-脚本:npm安装
工作目录:${{parameters.workingDir}}
-脚本:纱线安装
工作目录:${{parameters.workingDir}}
-脚本:npm运行编译
工作目录:${{parameters.workingDir}}
那么包-1的管道可能如下所示:


触发:
分支机构:
包括:
-主人
-释放/*
路径:
包括:
-包-1/*
步骤:
-模板:templates/template.yaml
参数:
工作目录:包-1
对于包-2:


触发:
分支机构:
包括:
-主人
-释放/*
路径:
包括:
-方案-2/*
步骤:
-模板:templates/template.yaml
参数:
工作目录:包-2
编辑

对于标记部件,您只需更改触发器部分:

触发器:
分支机构:
包括:
-主人
-参考文献/标签/*
创建并推送标记时:

git tag release-05
git push origin --tags
您的管道将启动:

然而,触发器的工作原理类似于或条件,所以对于主标签或新标签的任何更改,piepline都将启动。因此,如果标记另一个分支(不是主分支),管道将启动

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


触发:
分支机构:
包括:
-主人
-参考文献/标签/*
阶段:
-阶段:A
条件:eq(变量['Build.SourceBranch'],'master')
工作:
-工作:JA
步骤:
-脚本:|
echo“这是job Foo”
上述管道的运行时间为:

  • 主分支机构的变更
  • 任何推送到服务器的标记,但只有当您将标记推送到主分支时,它才会运行阶段A

谢谢你的回答,它已经帮了我很多忙了。这样,当我的包中有任何更改时,我就可以触发。当我的包中有更改且仅针对主控和新标记时,如何触发?我之所以想这样做,是因为我想制作一个管道来构建和部署一个包。当我在master有任何变化时,你的解决方案就会触发。我找到了,但我不知道如何将这个“onlyTags”放在我的.yml文件中。也许我的问题是语法。你能帮我吗?@MathiasGhenoAzzolini你能检查我的编辑吗?在我的测试中,最后一个示例不起作用,它跳过了“JA”作业的所有执行,并触发了三次。因此,我将“master”更改为“refs/heads/master”,作业“JA”被触发三次,而“JA”作业仅在标记事件中被跳过。因此,我尝试使用
startsWith
放置“refs/tags/”,它仅为TAG事件触发。(但仍然有三次,因为lerna.js)。但是,当我对其他包做了一个新的标记时,这个解决方案也会触发,所以它不会寻找我的
路径
属性。我的最终代码如果你有兴趣研究它,我可以与你分享我的项目。这是一个概念验证项目。谢谢你的回答。当我有路径、分支和新标记时,我仍然需要触发。您的意思是需要为同一存储库中的每个版本添加其他项目吗?由于DevOps repo具有全部历史记录,我认为您只需要在repo中添加一个项目,并为每个版本添加标记即可。Lerna.js是跨包管理标记的独特方式。我想为管道创建一个触发器,在这个触发器中,我可以基于特定包中的新版本自动部署一个项目。我可以创建管道来执行此部署,但目前没有触发器。扳机是我的问题。