关于使用 GitHub Actions Importer 从 Azure DevOps 迁移
以下说明将指导您配置环境,以便使用 GitHub Actions Importer 将 Azure DevOps 管道迁移到 GitHub Actions。
先决条件
- 一个 Azure DevOps 帐户或组织,其中包含您想要转换为 GitHub Actions 工作流的项目和管道。
- 访问权限,以便为您的帐户或组织创建 Azure DevOps 个人访问令牌。
- 一个可以运行基于 Linux 的容器的环境,并且可以安装必要的工具。
-
已安装并运行 Docker。
-
已安装GitHub CLI。
注意
GitHub Actions Importer 容器和 CLI 不需要安装在与您的 CI 平台相同的服务器上。
-
限制
使用 GitHub Actions Importer 从 Azure DevOps 迁移到 GitHub Actions 时存在一些限制。
- GitHub Actions Importer 需要 Azure DevOps API 的 5.0 版,该版本在 Azure DevOps Services 或 Azure DevOps Server 2019 中可用。较旧版本的 Azure DevOps Server 不兼容。
- 隐式添加到 Azure DevOps 管道的任务(例如检出源代码)可能会在 GitHub Actions Importer 审计中作为 GUID 名称添加。要查找 GUID 的友好任务名称,可以使用以下 URL:
https://dev.azure.com/:organization/_apis/distributedtask/tasks/:guid
。
手动任务
某些 Azure DevOps 结构必须手动从 Azure DevOps 迁移到 GitHub Actions 配置中。这些包括
- 组织、存储库和环境机密
- 服务连接,例如 OIDC Connect、GitHub Apps 和个人访问令牌
- 未知任务
- 自托管代理
- 环境
- 部署前审批
有关手动迁移的更多信息,请参阅“从 Azure Pipelines 迁移到 GitHub Actions”。
不支持的任务
GitHub Actions Importer 不支持迁移以下任务
- 部署前关卡
- 部署后关卡
- 部署后审批
- 某些资源触发器
安装 GitHub Actions Importer CLI 扩展
-
安装 GitHub Actions Importer CLI 扩展
Bash gh extension install github/gh-actions-importer
gh extension install github/gh-actions-importer
-
验证扩展是否已安装
$ gh actions-importer -h Options: -?, -h, --help Show help and usage information Commands: update Update to the latest version of GitHub Actions Importer. version Display the version of GitHub Actions Importer. configure Start an interactive prompt to configure credentials used to authenticate with your CI server(s). audit Plan your CI/CD migration by analyzing your current CI/CD footprint. forecast Forecast GitHub Actions usage from historical pipeline utilization. dry-run Convert a pipeline to a GitHub Actions workflow and output its yaml file. migrate Convert a pipeline to a GitHub Actions workflow and open a pull request with the changes.
配置凭据
configure
CLI 命令用于在使用 Azure DevOps 和 GitHub 时设置 GitHub Actions Importer 的必需凭据和选项。
-
创建一个 GitHub 个人访问令牌(经典版)。有关更多信息,请参阅“管理您的个人访问令牌”。
您的令牌必须具有
workflow
范围。创建令牌后,将其复制并保存在安全的位置以备后用。
-
创建一个 Azure DevOps 个人访问令牌。有关更多信息,请参阅 Azure DevOps 文档中的使用个人访问令牌。令牌必须具有以下范围
- 代理池:
Read
- 生成:
Read
- 代码:
Read
- 发布:
Read
- 服务连接:
Read
- 任务组:
Read
- 变量组:
Read
创建令牌后,将其复制并保存在安全的位置以备后用。
- 代理池:
-
在您的终端中,运行 GitHub Actions Importer
configure
CLI 命令gh actions-importer configure
configure
命令将提示您输入以下信息- 对于“您要配置哪些 CI 提供商?”,使用方向键选择
Azure DevOps
,按 Space 选择它,然后按 Enter。 - 对于“GitHub 的个人访问令牌”,输入您之前创建的个人访问令牌(经典版)的值,然后按 Enter。
- 对于“GitHub 实例的基本 URL”,按 Enter 接受默认值(
https://github.com
)。 - 对于“Azure DevOps 的个人访问令牌”,输入您之前创建的 Azure DevOps 个人访问令牌的值,然后按 Enter。
- 对于“Azure DevOps 实例的基本 URL”,按 Enter 接受默认值(
https://dev.azure.com
)。 - 对于“Azure DevOps 组织名称”,输入您的 Azure DevOps 组织的名称,然后按 Enter。
- 对于“Azure DevOps 项目名称”,输入您的 Azure DevOps 项目的名称,然后按 Enter。
下面显示了
configure
命令的示例$ gh actions-importer configure ✔ Which CI providers are you configuring?: Azure DevOps Enter the following values (leave empty to omit): ✔ Personal access token for GitHub: *************** ✔ Base url of the GitHub instance: https://github.com ✔ Personal access token for Azure DevOps: *************** ✔ Base url of the Azure DevOps instance: https://dev.azure.com ✔ Azure DevOps organization name: :organization ✔ Azure DevOps project name: :project Environment variables successfully updated.
- 对于“您要配置哪些 CI 提供商?”,使用方向键选择
-
在您的终端中,运行 GitHub Actions Importer
update
CLI 命令以连接到 GitHub Packages Container 注册表并确保容器映像已更新到最新版本gh actions-importer update
命令的输出应类似于以下内容
Updating ghcr.io/actions-importer/cli:latest... ghcr.io/actions-importer/cli:latest up-to-date
执行 Azure DevOps 审计
您可以使用 audit
命令获取 Azure DevOps 组织中所有项目的概览。
audit
命令执行以下步骤
- 获取在 Azure DevOps 组织中定义的所有项目。
- 将每个管道转换为等效的 GitHub Actions 工作流。
- 生成一份报告,总结使用 GitHub Actions Importer 可以实现的迁移的完整性和复杂性。
运行审计命令
要执行 Azure DevOps 组织的审计,请在您的终端中运行以下命令
gh actions-importer audit azure-devops --output-dir tmp/audit
检查审计结果
指定输出目录中的文件包含审计的结果。请参阅 audit_summary.md
文件以获取审计结果的摘要。
审计摘要包含以下部分。
管道
“管道”部分包含有关 GitHub Actions Importer 完成的转换率的高级统计信息。
下面列出了一些可能出现在“管道”部分中的关键术语
- 成功的管道已将 100% 的管道结构和单个项目自动转换为其 GitHub Actions 等效项。
- 部分成功的管道已转换所有管道结构,但是,某些单个项目未自动转换为其 GitHub Actions 等效项。
- 不支持的管道是 GitHub Actions Importer 不支持的定义类型。
- 失败的管道在转换时遇到致命错误。这可能由于以下三个原因之一造成
- 管道最初配置错误且无效。
- GitHub Actions Importer 在转换时遇到内部错误。
- 网络响应不成功导致管道无法访问,这通常是由于凭据无效造成的。
构建步骤
“构建步骤”部分概述了跨所有管道使用的各个构建步骤,以及 GitHub Actions Importer 自动转换了多少个步骤。
下面列出了一些可能出现在“构建步骤”部分中的关键术语
- 已知构建步骤是指已自动转换为等效操作的步骤。
- 未知构建步骤是指未自动转换为等效操作的步骤。
- 不支持的构建步骤是指以下两种情况之一
- GitHub Actions 从根本上不支持。
- 以与 GitHub Actions 不兼容的方式进行配置。
- 操作是已转换工作流中使用的操作列表。这对于以下情况可能很重要
- 如果您使用 GitHub Enterprise Server,则收集要同步到您的实例的操作列表。
- 定义组织级允许的操作列表。此操作列表是安全或合规性团队可能需要审查的操作的综合列表。
手动任务
“手动任务”部分概述了 GitHub Actions Importer 无法自动完成且必须手动完成的任务。
下面列出了一些可能出现在“手动任务”部分中的关键术语
- 机密是指在已转换管道中使用的存储库或组织级机密。必须在 GitHub Actions 中手动创建这些机密,才能使这些管道正常运行。有关更多信息,请参阅“在 GitHub Actions 中使用机密”。
- 自托管运行器是指在已转换管道中引用的运行器标签,该标签不是 GitHub 托管的运行器。您需要手动定义这些运行器,才能使这些管道正常运行。
文件
审计报告的最后一部分提供了在审计期间写入磁盘的所有文件的清单。
每个管道文件都包含审计中包含的各种文件,包括
- 在 GitHub 中定义的原始管道。
- 用于转换管道的任何网络响应。
- 已转换的工作流文件。
- 可用于对失败的管道转换进行故障排除的堆栈跟踪。
此外,workflow_usage.csv
文件包含所有操作、机密和运行器的逗号分隔列表,这些操作、机密和运行器由每个成功转换的管道使用。这对于确定哪些工作流使用哪些操作、机密或运行器非常有用,并且对于执行安全审查非常有用。
预测潜在的 GitHub Actions 使用情况
您可以使用 forecast
命令通过计算 Azure DevOps 中已完成管道运行的指标来预测潜在的 GitHub Actions 使用情况。
运行 forecast 命令
要执行对潜在 GitHub Actions 用法的预测,请在您的终端中运行以下命令。默认情况下,GitHub Actions Importer 会在预测报告中包含之前的七天。
gh actions-importer forecast azure-devops --output-dir tmp/forecast_reports
检查预测报告
指定输出目录中的 forecast_report.md
文件包含预测结果。
以下是预测报告中可能出现的一些关键术语
-
**作业数** 是已完成作业的总数。
-
**管道数** 是使用的唯一管道的数量。
-
**执行时间** 描述了运行程序在一个作业上花费的时间。此指标可用于帮助规划 GitHub 托管运行程序的成本。
此指标与您应期望在 GitHub Actions 中花费的金额相关。这将根据这些分钟使用的硬件而有所不同。您可以使用 GitHub Actions 定价计算器 来估算成本。
-
**队列时间** 指标描述了作业等待运行程序可用以执行它所花费的时间。
-
**并发作业** 指标描述了在任何给定时间运行的作业数量。此指标可用于定义应配置的运行程序数量。
此外,这些指标针对 Azure DevOps 中的每个运行程序队列进行定义。如果混合使用托管或自托管运行程序,或高规格或低规格机器,这将特别有用,因此您可以查看特定于不同类型运行程序的指标。
执行试运行迁移
您可以使用 dry-run
命令将 Azure DevOps 管道转换为等效的 GitHub Actions 工作流。试运行会在指定的目录中创建输出文件,但不会打开拉取请求以迁移管道。
如果 GitHub Actions Importer 无法自动转换任何内容,例如未知构建步骤或部分成功的管道,您可能需要创建自定义转换器以进一步自定义转换过程。有关更多信息,请参阅“使用自定义转换器扩展 GitHub Actions Importer”。
为构建管道运行试运行命令
要执行将 Azure DevOps 构建管道迁移到 GitHub Actions 的试运行,请在您的终端中运行以下命令,将 pipeline_id
替换为您要转换的管道的 ID。
gh actions-importer dry-run azure-devops pipeline --pipeline-id :pipeline_id --output-dir tmp/dry-run
您可以在指定的输出目录中查看试运行的日志和已转换的工作流文件。
为发布管道运行试运行命令
要执行将 Azure DevOps 发布管道迁移到 GitHub Actions 的试运行,请在您的终端中运行以下命令,将 pipeline_id
替换为您要转换的管道的 ID。
gh actions-importer dry-run azure-devops release --pipeline-id :pipeline_id --output-dir tmp/dry-run
您可以在指定的输出目录中查看试运行的日志和已转换的工作流文件。
执行生产迁移
您可以使用 migrate
命令转换 Azure DevOps 管道并使用等效的 GitHub Actions 工作流打开拉取请求。
为构建管道运行 migrate 命令
要将 Azure DevOps 构建管道迁移到 GitHub Actions,请在您的终端中运行以下命令,将 target-url
值替换为您 GitHub 存储库的 URL,并将 pipeline_id
替换为您要转换的管道的 ID。
gh actions-importer migrate azure-devops pipeline --pipeline-id :pipeline_id --target-url https://github.com/octo-org/octo-repo --output-dir tmp/migrate
该命令的输出包括将转换后的工作流添加到您的存储库的拉取请求的 URL。成功输出的示例类似于以下内容
$ gh actions-importer migrate azure-devops pipeline --target-url https://github.com/octo-org/octo-repo --output-dir tmp/migrate --azure-devops-project my-azure-devops-project
[2022-08-20 22:08:20] Logs: 'tmp/migrate/log/actions-importer-20220916-014033.log'
[2022-08-20 22:08:20] Pull request: 'https://github.com/octo-org/octo-repo/pull/1'
为发布管道运行 migrate 命令
要将 Azure DevOps 发布管道迁移到 GitHub Actions,请在您的终端中运行以下命令,将 target-url
值替换为您 GitHub 存储库的 URL,并将 pipeline_id
替换为您要转换的管道的 ID。
gh actions-importer migrate azure-devops release --pipeline-id :pipeline_id --target-url https://github.com/octo-org/octo-repo --output-dir tmp/migrate
该命令的输出包括将转换后的工作流添加到您的存储库的拉取请求的 URL。成功输出的示例类似于以下内容
$ gh actions-importer migrate azure-devops release --target-url https://github.com/octo-org/octo-repo --output-dir tmp/migrate --azure-devops-project my-azure-devops-project
[2022-08-20 22:08:20] Logs: 'tmp/migrate/log/actions-importer-20220916-014033.log'
[2022-08-20 22:08:20] Pull request: 'https://github.com/octo-org/octo-repo/pull/1'
检查拉取请求
成功运行 migrate
命令的输出包含一个链接,该链接指向将转换后的工作流添加到您的存储库的新拉取请求。
拉取请求的一些重要元素包括
- 在拉取请求描述中,一个名为**手动步骤**的部分,其中列出了在完成将管道迁移到 GitHub Actions 之前必须手动完成的步骤。例如,此部分可能会告诉您创建工作流中使用的任何机密。
- 已转换的工作流文件。选择拉取请求中的**已更改的文件**选项卡以查看将添加到您的 GitHub 存储库的工作流文件。
完成检查拉取请求后,您可以将其合并以将工作流添加到您的 GitHub 存储库。
参考
本节包含使用 GitHub Actions Importer 从 Azure DevOps 迁移时的环境变量、可选参数和支持的语法的参考信息。
配置环境变量
GitHub Actions Importer 使用环境变量进行其身份验证配置。这些变量在使用 configure
命令遵循配置过程时设置。有关更多信息,请参阅“配置凭据”部分。
GitHub Actions Importer 使用以下环境变量连接到您的 Azure DevOps 实例
GITHUB_ACCESS_TOKEN
:用于使用转换后的工作流创建拉取请求的个人访问令牌(经典)(需要workflow
范围)。GITHUB_INSTANCE_URL
:目标 GitHub 实例的 URL(例如,https://github.com
)。AZURE_DEVOPS_ACCESS_TOKEN
:用于对您的 Azure DevOps 实例进行身份验证的个人访问令牌。此令牌需要以下范围- 生成:
Read
- 代理池:
Read
- 代码:
Read
- 发布:
Read
- 服务连接:
Read
- 任务组:
Read
- 变量组:
Read
- 生成:
AZURE_DEVOPS_PROJECT
:迁移管道时要使用的项目名称或 GUID。如果您想对所有项目执行审核,则此选项是可选的。AZURE_DEVOPS_ORGANIZATION
:Azure DevOps 实例的组织名称。AZURE_DEVOPS_INSTANCE_URL
:Azure DevOps 实例的 URL,例如https://dev.azure.com
。
这些环境变量可以在 .env.local
文件中指定,该文件在运行 GitHub Actions Importer 时由其加载。
可选参数
您可以使用 GitHub Actions Importer 子命令的可选参数来自定义您的迁移。
--source-file-path
您可以将 --source-file-path
参数与 forecast
、dry-run
或 migrate
子命令一起使用。
默认情况下,GitHub Actions Importer 从源代码管理中获取管道内容。--source-file-path
参数告诉 GitHub Actions Importer 使用指定的源文件路径。
例如
gh actions-importer dry-run azure-devops pipeline --output-dir ./output/ --source-file-path ./path/to/azure_devops/pipeline.yml
--config-file-path
您可以将 --config-file-path
参数与 audit
、dry-run
和 migrate
子命令一起使用。
默认情况下,GitHub Actions Importer 从源代码管理中获取管道内容。--config-file-path
参数告诉 GitHub Actions Importer 使用指定的源文件。
--config-file-path
参数也可用于指定应将转换后的可重用工作流或组合操作迁移到的哪个存储库。
审核示例
在此示例中,GitHub Actions Importer 使用指定的 YAML 配置文件作为源文件来执行审核。
gh actions-importer audit azure-devops pipeline --output-dir ./output/ --config-file-path ./path/to/azure_devops/config.yml
要使用配置文件审核 Azure DevOps 实例,配置文件必须采用以下格式,并且每个 repository_slug
必须是唯一的
source_files:
- repository_slug: azdo-project/1
path: file.yml
- repository_slug: azdo-project/2
paths: path.yml
您可以通过组合 Azure DevOps 组织名称、项目名称和管道 ID 来生成管道的 repository_slug
。例如,my-organization-name/my-project-name/42
。
试运行示例
在此示例中,GitHub Actions Importer 使用指定的 YAML 配置文件作为源文件来执行试运行。
通过将配置文件中的 repository_slug
与 --azure-devops-organization
和 --azure-devops-project
选项的值匹配来选择管道。然后使用 path
拉取指定的源文件。
gh actions-importer dry-run azure-devops pipeline --output-dir ./output/ --config-file-path ./path/to/azure_devops/config.yml
指定转换后的可重用工作流和组合操作的存储库
GitHub Actions Importer 使用提供给 --config-file-path
参数的 YAML 文件来确定转换后的可重用工作流和组合操作迁移到的存储库。
首先,您应该在不使用 --config-file-path
参数的情况下运行审核
gh actions-importer audit azure-devops --output-dir ./output/
此命令的输出将包含一个名为 config.yml
的文件,其中包含 GitHub Actions Importer 转换的所有可重用工作流和组合操作的列表。例如,config.yml
文件可能具有以下内容
reusable_workflows:
- name: my-reusable-workflow.yml
target_url: https://github.com/octo-org/octo-repo
ref: main
composite_actions:
- name: my-composite-action.yml
target_url: https://github.com/octo-org/octo-repo
ref: main
您可以使用此文件指定应将可重用工作流或组合操作添加到哪个存储库和 ref。然后,您可以使用 --config-file-path
参数向 GitHub Actions Importer 提供 config.yml
文件。例如,在运行 migrate
命令以针对配置文件中定义的每个唯一存储库打开拉取请求时,可以使用此文件
gh actions-importer migrate azure-devops pipeline --config-file-path config.yml --target-url https://github.com/my-org/my-repo
Azure DevOps 管道的支持语法
下表显示了 GitHub Actions Importer 当前能够转换的属性类型。
Azure Pipelines | GitHub Actions | 状态 |
---|---|---|
condition |
| 支持 |
container |
| 支持 |
continuousIntegration |
| 支持 |
job |
| 支持 |
pullRequest |
| 支持 |
stage |
| 支持 |
steps |
| 支持 |
strategy |
| 支持 |
timeoutInMinutes |
| 支持 |
variables |
| 支持 |
手动部署 |
| 部分支持 |
pool |
| 部分支持 |
services |
| 部分支持 |
strategy |
| 部分支持 |
triggers |
| 部分支持 |
pullRequest |
| 不支持 |
schedules |
| 不支持 |
triggers |
| 不支持 |
有关支持的 Azure DevOps 任务的更多信息,请参阅 github/gh-actions-importer
存储库。
环境变量映射
GitHub Actions Importer 使用下表中的映射将默认的 Azure DevOps 环境变量转换为 GitHub Actions 中最接近的等效项。
Azure Pipelines | GitHub Actions |
---|---|
$(Agent.BuildDirectory) | ${{ runner.workspace }} |
$(Agent.HomeDirectory) | ${{ env.HOME }} |
$(Agent.JobName) | ${{ github.job }} |
$(Agent.OS) | ${{ runner.os }} |
$(Agent.ReleaseDirectory) | ${{ github.workspace}} |
$(Agent.RootDirectory) | ${{ github.workspace }} |
$(Agent.ToolsDirectory) | ${{ runner.tool_cache }} |
$(Agent.WorkFolder) | ${{ github.workspace }} |
$(Build.ArtifactStagingDirectory) | ${{ runner.temp }} |
$(Build.BinariesDirectory) | ${{ github.workspace }} |
$(Build.BuildId) | ${{ github.run_id }} |
$(Build.BuildNumber) | ${{ github.run_number }} |
$(Build.DefinitionId) | ${{ github.workflow }} |
$(Build.DefinitionName) | ${{ github.workflow }} |
$(Build.PullRequest.TargetBranch) | ${{ github.base_ref }} |
$(Build.PullRequest.TargetBranch.Name) | ${{ github.base_ref }} |
$(Build.QueuedBy) | ${{ github.actor }} |
$(Build.Reason) | ${{ github.event_name }} |
$(Build.Repository.LocalPath) | ${{ github.workspace }} |
$(Build.Repository.Name) | ${{ github.repository }} |
$(Build.Repository.Provider) | GitHub |
$(Build.Repository.Uri) | ${{ github.server.url }}/${{ github.repository }} |
$(Build.RequestedFor) | ${{ github.actor }} |
$(Build.SourceBranch) | ${{ github.ref }} |
$(Build.SourceBranchName) | ${{ github.ref }} |
$(Build.SourceVersion) | ${{ github.sha }} |
$(Build.SourcesDirectory) | ${{ github.workspace }} |
$(Build.StagingDirectory) | ${{ runner.temp }} |
$(Pipeline.Workspace) | ${{ runner.workspace }} |
$(Release.DefinitionEnvironmentId) | ${{ github.job }} |
$(Release.DefinitionId) | ${{ github.workflow }} |
$(Release.DefinitionName) | ${{ github.workflow }} |
$(Release.Deployment.RequestedFor) | ${{ github.actor }} |
$(Release.DeploymentID) | ${{ github.run_id }} |
$(Release.EnvironmentId) | ${{ github.job }} |
$(Release.EnvironmentName) | ${{ github.job }} |
$(Release.Reason) | ${{ github.event_name }} |
$(Release.RequestedFor) | ${{ github.actor }} |
$(System.ArtifactsDirectory) | ${{ github.workspace }} |
$(System.DefaultWorkingDirectory) | ${{ github.workspace }} |
$(System.HostType) | 构建 |
$(System.JobId) | ${{ github.job }} |
$(System.JobName) | ${{ github.job }} |
$(System.PullRequest.PullRequestId) | ${{ github.event.number }} |
$(System.PullRequest.PullRequestNumber) | ${{ github.event.number }} |
$(System.PullRequest.SourceBranch) | ${{ github.ref }} |
$(System.PullRequest.SourceRepositoryUri) | ${{ github.server.url }}/${{ github.repository }} |
$(System.PullRequest.TargetBranch) | ${{ github.event.base.ref }} |
$(System.PullRequest.TargetBranchName) | ${{ github.event.base.ref }} |
$(System.StageAttempt) | ${{ github.run_number }} |
$(System.TeamFoundationCollectionUri) | ${{ github.server.url }}/${{ github.repository }} |
$(System.WorkFolder) | ${{ github.workspace }} |
模板
您可以使用 GitHub Actions 导入器转换 Azure DevOps 模板。
限制
GitHub Actions 导入器能够转换 Azure DevOps 模板,但存在一些限制。
- 在
stages
、deployments
和jobs
键下使用的 Azure DevOps 模板将转换为 GitHub Actions 中的可重用工作流。有关更多信息,请参阅“重用工作流”。 - 在
steps
键下使用的 Azure DevOps 模板将转换为复合操作。有关更多信息,请参阅“创建复合操作”。 - 如果您当前拥有引用其他作业模板的作业模板,GitHub Actions 导入器会将这些模板转换为可重用工作流。由于可重用工作流不能引用其他可重用工作流,因此这在 GitHub Actions 中是不合法的语法。您必须手动更正嵌套的可重用工作流。
- 如果模板引用了外部 Azure DevOps 组织或 GitHub 存储库,则必须使用
--credentials-file
选项提供访问此模板的凭据。有关更多信息,请参阅“补充参数和设置”。 - 您可以使用以下注意事项动态生成 YAML 使用
each
表达式- 不支持嵌套的
each
块,这会导致父each
块不受支持。 each
和包含的if
条件在转换时进行评估,因为 GitHub Actions 不支持这种插入方式。- 不支持
elseif
块。如果需要此功能,您必须手动更正它们。 - 支持嵌套的
if
块,但不支持嵌套在if
条件下的if/elseif/else
块。 - 不支持使用预定义的 Azure DevOps 变量的
if
块。
- 不支持嵌套的
支持的模板
GitHub Actions 导入器支持下表中列出的模板。
Azure Pipelines | GitHub Actions | 状态 |
---|---|---|
从模板扩展 | 可重用工作流 | 支持 |
作业模板 | 可重用工作流 | 支持 |
阶段模板 | 可重用工作流 | 支持 |
步骤模板 | 复合操作 | 支持 |
经典编辑器中的任务组 | 变化 | 支持 |
不同 Azure DevOps 组织、项目或存储库中的模板 | 变化 | 支持 |
GitHub 存储库中的模板 | 变化 | 支持 |
变量模板 | env | 支持 |
条件插入 | 作业/步骤上的if 条件 | 部分支持 |
迭代插入 | 不适用 | 部分支持 |
带有参数的模板 | 变化 | 部分支持 |
模板文件路径名称
GitHub Actions 导入器可以提取带有相对或动态文件路径(文件名称中包含变量、参数和迭代表达式)的模板。但是,必须设置默认值。
变量文件路径名称示例
# File: azure-pipelines.yml
variables:
- template: 'templates/vars.yml'
steps:
- template: "./templates/$"
# File: templates/vars.yml
variables:
one: 'simple_step.yml'
参数文件路径名称示例
parameters:
- name: template
type: string
default: simple_step.yml
steps:
- template: "./templates/${{ parameters.template }}"
迭代文件路径名称示例
parameters:
- name: steps
type: object
default:
- build_step
- release_step
steps:
- ${{ each step in parameters.steps }}:
- template: "$-variables.yml"
模板参数
GitHub Actions 导入器支持下表中列出的参数。
Azure Pipelines | GitHub Actions | 状态 |
---|---|---|
字符串 | inputs.string | 支持 |
数字 | inputs.number | 支持 |
布尔值 | inputs.boolean | 支持 |
对象 | 使用fromJSON 表达式的inputs.string | 部分支持 |
步骤 | 步骤 | 部分支持 |
stepList | 步骤 | 部分支持 |
job | job | 部分支持 |
jobList | job | 部分支持 |
部署 | job | 部分支持 |
deploymentList | job | 部分支持 |
stage | job | 部分支持 |
stageList | job | 部分支持 |
注意
如果在step
键下使用此参数类型的模板,则只有在模板步骤的开头或结尾使用步骤时,该模板才会被序列化为复合操作。如果在stage
、deployment
和job
键下使用此参数类型的模板,则不会将其转换为可重用工作流,而是将其序列化为独立工作流。
法律声明
部分内容已根据 https://github.com/github/gh-actions-importer/ 在 MIT 许可下进行了改编
MIT License
Copyright (c) 2022 GitHub
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.