使用源代码管理集成

Azure 自动化中的源代码管理集成支持源代码管理存储库中的单向同步。 通过源代码管理,可以使用 GitHub 或 Azure DevOps 源代码管理存储库中的脚本使自动化帐户中的 Runbook 保持最新。 此功能可以轻松地将已在开发环境中测试过的代码提升到生产自动化帐户。

使用源代码管理集成可轻松与团队协作、跟踪更改,以及回退到旧版 Runbook。 例如,通过源代码管理可以将源代码管理中的不同分支同步到开发、测试和生产自动化帐户。

注意

源代码管理同步作业以自动化帐户用户身份运行,并且按与其他自动化作业相同的费率计费。 此外,Azure 自动化作业不支持 MFA(多重身份验证)。

源代码管理类型

Azure 自动化支持三种类型的源代码管理:

  • GitHub
  • Azure DevOps (Git)
  • Azure DevOps (TFVC)

先决条件

注意

Azure 自动化支持具有源代码管理集成的系统分配的托管标识和用户分配的托管标识。 对于使用用户分配的托管标识,请创建一个自动化变量 AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID,将其值用作用户分配的标识的客户端 ID。 应启用用户分配的 Managed Identity,并使参与者能够访问自动化帐户。 如果未创建此变量,则默认情况下使用系统分配的标识。

屏幕截图显示了用户分配的托管标识。

如果同时启用了运行方式帐户和托管标识,则优先使用托管标识。

重要

Azure 自动化运行方式帐户将于 2023 年 9 月 30 日停用,将替换为托管标识。 在该日期之前,你需要从运行方式帐户迁移到托管标识

注意

根据 Azure DevOps 文档,“通过 OAuth 进行第三方应用程序访问”策略默认对所有新组织关闭。 因此,如果尝试在 Azure 自动化中配置源代码管理(使用 Azure Devops (Git) 作为源代码管理类型,而不在 Azure DevOps 中的组织设置的“策略”磁贴下启用“通过 OAuth 进行第三方应用程序访问”),则可能会收到错误“SourceControl securityToken 无效”。 因此,为避免此错误,请务必先在 Azure DevOps 中组织设置的策略磁贴下启用“通过 OAuth 进行第三方应用程序访问”。

配置源代码管理

本部分介绍如何为自动化帐户配置源代码管理。 可以使用 Azure 门户或 PowerShell。

将托管标识分配给参与者角色

此示例使用 Azure PowerShell 演示如何将订阅中的“参与者”角色分配给 Azure 自动化帐户资源。

  1. 使用提升的权限打开 PowerShell 控制台。

  2. 运行命令 Connect-AzAccount -Environment AzureChinaCloud 登录到 Azure。

  3. 若要将托管标识分配给“参与者”角色,请运行以下命令。

    New-AzRoleAssignment `
        -ObjectId <automation-Identity-Object(Principal)-Id> `
        -Scope "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Automation/automationAccounts/{automationAccountName}" `
        -RoleDefinitionName "Contributor"
    

在 Azure 门户中配置源代码管理

使用此过程通过 Azure 门户配置源代码管理。

  1. 在自动化帐户中,选择“源代码管理”,然后单击“添加” 。

    选择“源代码管理”

  2. 选择“源代码管理类型”,然后单击“身份验证” 。

  3. 随即将打开一个浏览器窗口,并提示你登录。 根据提示完成身份验证。

  4. 在“源代码管理摘要”页上,使用字段填写下面定义的源代码管理属性。 完成后单击“保存” 。

    属性 说明
    源代码管理名称 源代码管理的友好名称。 该名称只能包含字母和数字。
    源代码管理类型 源代码管理机制的类型。 可用选项包括:
    * GitHub
    * Azure DevOps (Git)
    * Azure DevOps (TFVC)
    存储库 存储库或项目的名称。 检索前 200 个存储库。 要搜索存储库,请在字段中键入名称,然后单击“在 GitHub 上搜索”。
    分支 要从源文件中提取的分支。 分支目标确定不适用于 TFVC 源代码管理类型。
    文件夹路径 包含要同步的 Runbook 的文件夹,例如 /Runbook。 仅同步指定文件夹中的 Runbook。 不支持递归。
    自动同步1 该设置用于在源代码管理存储库或 GitHub 存储库中提交时打开或关闭自动同步。
    发布 Runbook 如果从源代码管理同步后自动发布 Runbook,则设置为“开启”,否则设为“关闭”。
    说明 指定有关源代码管理的其他详细信息的文本。

    1 只有项目管理员或 GitHub 存储库所有者才能在配置源代码管理与 Azure DevOps 的集成时启用自动同步。 协作者只能在不使用自动同步的情况下配置源代码管理。
    自动同步不适用于自动化专用链接。 如果启用专用链接,则源代码管理 Webhook 调用会失败,因为它位于网络外部。

    描述源代码管理摘要的屏幕截图。

注意

  • 源代码管理存储库的登录名可能与 Azure 门户的登录不同。 配置源代码管理时,请确保使用正确的源代码管理存储库的帐户登录。 如果有疑问,请在浏览器中打开新的选项卡并从 dev.azure.com、visualstudio.com 或 github.com 中注销,然后尝试连接源代码管理 。
  • 不支持跨租户身份验证。

在 PowerShell 中配置源代码管理

还可以使用 PowerShell 在 Azure 自动化中配置源代码管理。 要使用 PowerShell cmdlet 执行此操作,需要个人访问令牌 (PAT)。 使用 New-AzAutomationSourceControl cmdlet 创建源代码管理连接。 此 cmdlet 需要 PAT 的安全字符串。 要了解如何创建安全字符串,请参阅 ConvertTo-SecureString

以下附属部分演示如何在 PowerShell 中创建 GitHub、Azure DevOps (Git) 和 Azure DevOps (TFVC) 的源代码管理连接。

创建适用于 GitHub 的源代码管理连接

New-AzAutomationSourceControl -Name SCGitHub -RepoUrl https://github.com/<accountname>/<reponame>.git -SourceType GitHub -FolderPath "/MyRunbooks" -Branch main -AccessToken <secureStringofPAT> -ResourceGroupName <ResourceGroupName> -AutomationAccountName <AutomationAccountName>

创建 Azure DevOps (Git) 的源代码管理连接

注意

Azure DevOps (Git) 使用一个访问“dev.azure.com”(而不是旧格式中使用的“visualstudio.com”)的 URL。 早期的 URL 格式 https://<accountname>.visualstudio.com/<projectname>/_git/<repositoryname> 已被弃用,但仍受支持。 首选新格式。

New-AzAutomationSourceControl -Name SCReposGit -RepoUrl https://dev.azure.com/<accountname>/<adoprojectname>/_git/<repositoryname> -SourceType VsoGit -AccessToken <secureStringofPAT> -Branch main -ResourceGroupName <ResourceGroupName> -AutomationAccountName <AutomationAccountName> -FolderPath "/Runbooks"

创建 Azure DevOps (TFVC) 的源代码管理连接

注意

Azure DevOps (TFVC) 使用一个访问“dev.azure.com”(而不是旧格式中使用的“visualstudio.com”)的 URL。 早期的 URL 格式 https://<accountname>.visualstudio.com/<projectname>/_versionControl 已被弃用,但仍受支持。 首选新格式。

New-AzAutomationSourceControl -Name SCReposTFVC -RepoUrl https://dev.azure.com/<accountname>/<adoprojectname>/_git/<repositoryname> -SourceType VsoTfvc -AccessToken <secureStringofPAT> -ResourceGroupName <ResourceGroupName> -AutomationAccountName <AutomationAccountName> -FolderPath "/Runbooks"

个人访问令牌 (PAT) 权限

源代码管理需要一些 PAT 的最低权限。 以下附属部分包含 GitHub 和 Azure DevOps 所需的最低权限。

GitHub 的最低 PAT 权限

下表定义了 GitHub 所需的最低 PAT 权限。 如需详细了解如何在 GitHub 中创建 PAT,请参阅创建命令行的个人访问令牌

范围 说明
repo
repo:status 访问提交状态
repo_deployment 访问部署状态
public_repo 访问公共存储库
repo:invite 访问存储库邀请
security_events 读取和写入安全事件
admin:repo_hook
write:repo_hook 写入存储库挂钩
read:repo_hook 读取存储库挂钩
Azure DevOps 所需的最低 PAT 权限

下表列出了 Azure DevOps 所需的最低 PAT 权限。 有关在 Azure DevOps 中创建 PAT 的详细信息,请参阅使用个人访问令牌对访问进行身份验证

范围 访问类型
Code 读取
Project and team 读取
Identity 读取
User profile 读取
Work items 读取
Service connections 读取、查询、管理1

1只有在启用了自动同步时才需要 Service connections 权限。

与源代码管理同步

请按照以下步骤与源代码管理同步。

  1. 请从“源代码管理”页面上的表中选择源。

  2. 单击“开始同步”以开始同步过程。

  3. 单击“同步作业”选项卡,查看当前同步作业或之前的同步作业的状态。

  4. 在“源代码管理”下拉列表中,选择一个源代码管理机制。

    同步状态

  5. 单击某个作业可以查看作业输出。 以下示例是源代码管理同步作业的输出。

    ===================================================================
    
    Azure Automation Source Control.
    Supported runbooks to sync: PowerShell Workflow, PowerShell Scripts, DSC Configurations, Graphical, and Python 2.
    
    Setting AzEnvironment.
    
    Getting AzureRunAsConnection.
    
    Logging in to Azure...
    
    Source control information for syncing:
    
    [Url = https://ContosoExample.visualstudio.com/ContosoFinanceTFVCExample/_versionControl] [FolderPath = /Runbooks]
    
    Verifying url: https://ContosoExample.visualstudio.com/ContosoFinanceTFVCExample/_versionControl
    
    Connecting to VSTS...
    
    Source Control Sync Summary:
    
    2 files synced:
     - ExampleRunbook1.ps1
     - ExampleRunbook2.ps1
    
    ==================================================================
    
    
  6. 通过在“源代码管理同步作业摘要”页上选择“所有日志”,可以获取附加日志记录。 这些附加日志条目有助于你解决使用源代码管理时可能出现的问题。

断开连接源代码管理

断开与源代码管理存储库的连接:

  1. 在自动化帐户中的“帐户设置”下打开源代码管理 。

  2. 选择要删除的源代码管理机制。

  3. 在“源代码管理摘要”页面上,单击“删除”。

处理编码问题

如果多人使用不同的编辑器在源代码管理存储库中编辑 Runbook,则可能发生编码问题。 如需详细了解此情况,请参阅编码问题的常见原因

更新 PAT

目前,不能使用 Azure 门户在源代码管理中更新 PAT。 当 PAT 过期或吊销时,可以通过以下方式之一使用新的访问令牌更新源代码管理: