Azure devops 使用Lerna.js和Azure Devops管道
我正在研究azuredevops管道到一个新项目。我对devops一无所知 在这个项目中,我想使用lerna.js来管理我的monorepo和我的包 考虑到我的monorepo中有三个项目: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
- 包1(1.0.1)
- 包2(1.0.0)
- 包3(1.0.3)
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
startsWith
放置“refs/tags/”,它仅为TAG事件触发。(但仍然有三次,因为lerna.js)。但是,当我对其他包做了一个新的标记时,这个解决方案也会触发,所以它不会寻找我的路径
属性。我的最终代码如果你有兴趣研究它,我可以与你分享我的项目。这是一个概念验证项目。谢谢你的回答。当我有路径、分支和新标记时,我仍然需要触发。您的意思是需要为同一存储库中的每个版本添加其他项目吗?由于DevOps repo具有全部历史记录,我认为您只需要在repo中添加一个项目,并为每个版本添加标记即可。Lerna.js是跨包管理标记的独特方式。我想为管道创建一个触发器,在这个触发器中,我可以基于特定包中的新版本自动部署一个项目。我可以创建管道来执行此部署,但目前没有触发器。扳机是我的问题。