[英]Azure DevOps - Git Repository setup
我们有一个应用程序依赖于多个独立的代码模块——它们之间没有交互。 请参阅下面的粗略示例:
…………
考虑到代码全部用于一个应用程序,但每个模块彼此独立,我如何为其设置存储库以使其完成以下任务:
我看到的唯一解决方案是为每个模块创建一个 repo,但我希望有人知道比这更优雅的方法。
注意:我不是全职开发人员——我有更多的运营管理资格,而且我对 Git/repos/etc 的了解有限——所以我承认我可能遗漏了一条明显的信息,这会使这个问题变得毫无意义。
为了实现您的目标,您应该考虑以下步骤:
specific path build
trigger:
branches:
include:
- master
- releases/*
paths:
include:
- Module-1/*
exclude:
- '*'
上面的配置只为 Module-1 设置了一个 CI 触发器,忽略了其他目录中的更改。 稍后在该脚本中,您可以为 Module-1 准备 package 和部署
如果您决定执行上述步骤,您还应该考虑使用模板以避免重复自己。 请检查文档。
您还应该 [添加分支策略] 来阻止直接提交到 master 分支。 在这里,您还可以考虑获得额外服务的批准,以检查您是否在几个模块中完成了 PR 更改。 在这种情况下,您可以决定该 PR 失败。 有关更多信息,请检查这两个链接:
上面的步骤应该给你选择性的构建和部署,并且当更改传播到许多模块时 PR 失败。 我知道这离可行的解决方案还很远,但我希望至少我向您展示了您应该遵循的方向。
如果您有很多模块并且不想为每个模块创建管道,您可以考虑以下解决方法。
如果 module1 在您的 repo 的文件夹 module1 中。 您可以在脚本任务中运行 git 命令git diff --name-only HEAD HEAD~1
以获取更新哪个模块。 并使用语句##vso[task.setvariable]
将模块文件夹设置为变量。 然后您可以配置构建任务以仅构建更改的模块。 请查看以下示例:
查看文档以了解有关task.setvariable的更多信息。 点击这里了解更多关于条件的信息。
steps:
- powershell: |
#get the changed files
$a = git diff --name-only HEAD HEAD~1
#get the changed module folders
$folders = $a | foreach {$_.split("/")[0]}
#assign the folders to variable folderName
echo "##vso[task.setvariable variable=folderName]$folders"
#this build task will only be executed when module1 changed
- task: VSBuild@1
displayName: Build Module1
condition: contains(variables.folderName, 'module1')
#this build task will only be executed when module2 changed
- task: VSBuild@1
displayName: Build Module2
condition: contains(variables.fileName, 'module2')
上面yaml是一个简单的例子。 您可能需要根据您的项目稍微更改 powershell 任务脚本。 如果所有模块都使用相同的构建配置,则只能使用一个构建任务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.