繁体   English   中英

Azure DevOps - Git 存储库设置

[英]Azure DevOps - Git Repository setup

我们有一个应用程序依赖于多个独立的代码模块——它们之间没有交互。 请参阅下面的粗略示例:

  1. 模块 1
    • 文件 1.1
    • 文件 1.2
    • 文件 1.3
  2. 模块 2
    • 文件 2.1
    • 文件 2.2

…………

  1. 模块 1000
    • 文件 1000.1
    • 文件 1000.2

考虑到代码全部用于一个应用程序,但每个模块彼此独立,我如何为其设置存储库以使其完成以下任务:

  • 模块 1 的拉取请求仅拉取模块 1
  • 提交请求只提交模块 1 的文件
  • Azure Devops部署只部署了Module 1的文件
    • 这是最关键的部分
    • 我不在乎用户是否克隆了整个 1000 个模块存储库只在模块 1 上工作,只要当用户提交分支并准备部署到 Production 时,它只部署了模块 1 - 我无法部署处理将所有 1000 个模块发送到生产环境只是因为模块 1 被修改

我看到的唯一解决方案是为每个模块创建一个 repo,但我希望有人知道比这更优雅的方法。

注意:我不是全职开发人员——我有更多的运营管理资格,而且我对 Git/repos/etc 的了解有限——所以我承认我可能遗漏了一条明显的信息,这会使这个问题变得毫无意义。

为了实现您的目标,您应该考虑以下步骤:

  • 适当的CI/PR 触发器只构建更改的模块——每个存储库可以有多个构建。 您需要的只是单独的 YAML 文件
 specific path build
trigger:
  branches:
    include:
    - master
    - releases/*
  paths:
    include:
    - Module-1/*
    exclude:
    - '*'

上面的配置只为 Module-1 设置了一个 CI 触发器,忽略了其他目录中的更改。 稍后在该脚本中,您可以为 Module-1 准备 package 和部署

上面的步骤应该给你选择性的构建和部署,并且当更改传播到许多模块时 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM