在 Azure DevOps Pipeline 中签出子模块或多个代码库

记录如何在 Azure Pipelines 中签出 Git 子模块或者多个代码库。

存储库类型:

  • 公共库
  • 私有库-同项目
  • 私有库-不同项目
  • 私有库-不同组织(使用服务连接)

由于 Azure Repos 受到保护,所以有两种做法。

第一种:关闭 Pipeline Repo 保护设置(不推荐)

组织级别:
OrgnaizationSettings / Pipelines / Settings:Protect access to repositories in YAML pipelines

项目级别:
ProjectSettings / Pipelines / Settings:Protect access to repositories in YAML pipelines

第二种:在管道中显示地引用代码库资源(推荐)

资源定义

1
2
3
4
5
 - repository: <repo_id>
type: <git | github ...>
name: <project>/<repo>
ref: refs/heads/<branch>
endpoint: <service_connection_id>

资源示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
resources:
repositories:
# 位于 Azure DevOps 同一个组织,同一个项目
- repository: awe-id
type: git
name: awe
ref: refs/heads/main

# 位于 Azure DevOps 同一个组织,其他项目
- repository: bar-id
type: git
name: other-project/bar
ref: refs/heads/main

# 位于 Azure DevOps 不同的组织
- repository: foo-id
type: git
name: common/foo
ref: refs/heads/main
endpoint: MyOrgServiceConnection

jobs:
- job: yourJobName

uses:
repositories:
- awe-id
- bar-id

steps:
# 签出当前代码库的子模块 awe
- checkout: self
submodules: true

# 签出其他项目的代码库 bar
- checkout: bar-id

# 签出其他组织的代码库 foo
- checkout: foo-id

# ....

服务连接授权(如有)

如果使用了服务连接,则需要授权给 Pipeline,才能在 Pipeline 中使用。

方式一:授权全部管道

在服务连接的属性中开启。

方式二:授权指定管道

在服务连接的安全性中,添加对指定管道的授权。

然后运行管道,在管道的执行页面中,将会提示你进行授权,点击之后管道成功运行。

参考文档

Azure Pipelines

Posts