本教程介绍如何使用GitHub操作部署Azure容器应用。我将提供有关如何生成自定义Github操作工作流以将容器应用部署到Azure的示例和分步说明。这将介绍如何根据需要为容器部署创建自己的操作。 一些假设:你有一个Azure帐户。您有一个GitHub帐户。你有AzureCLI。你有权在要部署到的Azure订阅中创建资源和服务主体。您有一个映像存储库,您可以在其中存储容器映像。您有要部署的代码。 下面是用于部署容器应用的操作工作流示例:Thenameofthedeploymentname:TriggerautodeploymentforcontainerappsWhenthisactionwillbeexecutedon:Automaticallytriggeritwhendetectedchangesinrepopush:Branchedtolookoutforchangesonbranches:〔main〕Allowmanuallytriggerofthejobsworkflowdispatch:jobs:Jobrunimage。build:runson:ubuntulatestStepsthatneedtohappeninthisjobrun。steps:Checkoutthecodename:Checkoutcodeuses:actionscheckoutv2LogintoAzureCLIname:LogintoAzureuses:azureloginv1with:AzureCLIcredentialscreds:{{secrets。AZURECREDENTIALS}}Buildanddeploythecontainerappname:BuildanddeployContainerAppuses:azurecontainerappsdeployactionv0with:appSourcePath:{{github。workspace}}acrName:ContainerRegisteryNameacrUsername:{{secrets。REGISTRYUSERNAME}}acrPassword:{{secrets。REGISTRYPASSWORD}}containerAppName:ContainerAppNamecontainerAppEnvironment:ContainerAppEnvironmentNameresourceGroup:ContainerAppResourceGroupimageToBuild:ContainerRegistryImageName:Tage。g。{{github。sha}}dockerfilePath:PathtoDockerfile 这是相当多的,所以让我们解开它。GitHub操作文件结构工作流名称 name:Triggerautodeploymentforcontainerapps 这是要为部署运行指定的名称。工作流触发器Whenthisactionwillbeexecutedon:Automaticallytriggeritwhendetectedchangesinrepopush:Branchedtolookoutforchangesonbranches:〔main〕Allowmanuallytriggerofthejobsworkflowdispatch: worflow触发器是你选择触发部署的方式。此示例基于我将代码推送到主分支创建一个触发器;可以根据触发部署的分支进行设置。也可以使用通配符,例如:branches:mainreleases 这允许您在GitHub操作中手动触发工作流。当我对基础结构进行更改并且需要再次触发部署时,我发现这特别有用。workflowdispatch 您可以在此处阅读有关工作流触发器的更多信息: 触发工作流的事件GitHub文档工作 这是一组需要运行的步骤。您可以有一个或多个作业。 上面的例子只有一个名为build的作业,它构建和部署项目并在ubuntu映像上运行。 默认情况下,这些作业并行运行,但您可以使用needs:关键字创建对其他作业的依赖关系。您还可以有条件地运行作业。jobs:review:name:DeployReviewstaging:name:DeployStagingproduction:name:DeployProductionif:{{always()}}needs:〔staging,review〕 在上图中,部署暂存、部署查看和部署生产块是作业。 您可以在此处阅读有关工作的更多信息: 在工作流中使用作业GitHub文档步骤 这些是需要作为作业的一部分运行的任务。在这种情况下,我们有3个步骤需要作为作业的一部分运行。签出代码登录到Azure生成和部署容器应用 这些操作可以包含来自市场的操作或自定义操作,但在本例中,我们使用标准市场操作。 签出代码步骤将运行此操作的存储库中的代码签出到运行生成部署的容器中。 登录到Azure步骤将你登录到azureCLI,并为部署提供用于部署容器应用的访问令牌。 生成和部署容器应用将在下一节中生成和部署容器应用,我们将更详细地介绍其用途。凭据和机密设置 首先,我们需要在Azure中创建服务主体。最好的方法是使用此AzureCLI。 请确保已登录到要部署容器应用的订阅。 然后运行以下命令来创建服务主体:azadspcreateforrbacnamemyApprolecontributorscopessubscriptions{subscriptionid}resourceGroups{resourcegroup}sdkauth 将and替换为要分别部署到的订阅ID和资源组。还应替换为服务原则名称。{subscriptionid}{resourcegroup}myApp 此命令将创建一个RBAC(基于角色的访问控制)服务主体,然后该主体对订阅和资源组具有参与者访问权限。 然后,您将获得如下所示的输出。您应该小心不要共享此信息,因为它是敏感信息。您需要保留它,因为您很快就会使用它。{clientId:GUID,clientSecret:STRING,subscriptionId:GUID,tenantId:GUID,resourceManagerEndpointUrl:URL(。。。)} 现在,在存储库的GitHub中创建机密,以便将其用于操作。单击要部署的存储库。导航到设置然后在安全性下展开机密和变量点击操作在机密选项卡上,单击新建存储库机密创建名为AZURECREDENTIALS的密钥使机密值成为您通过创建服务原则获得的值。 仅当要使用容器注册表时,才需要此部分。 创建机密时,还需要2个。REGISTRYUSERNAME和REGISTRYPASSWORD。这可以从Azure容器注册表获取。 REGISTRYUSERNAME是注册表用户的用户名。 REGISTRYPASSWORD是注册表用户的密码。最低限度 工作流页面的前半部分应如下所示:Thenameofthedeploymentname:TriggerautodeploymentforcontainerappsWhenthisactionwillbeexecutedon:Automaticallytriggeritwhendetectedchangesinrepopush:Branchedtolookoutforchangesonbranches:〔main〕Allowmannuallytriggerofthejobsworkflowdispatch:jobs:Jobrunimage。build:runson:ubuntulatest 添加的以下步骤将基于不同的方案。 因此,让我们从前三个开始。 1。)您正在部署具有公共注册表访问权限的现有容器映像。steps:name:LogintoAzureuses:azureloginv1with:creds:{{secrets。AZURECREDENTIALS}}name:BuildanddeployContainerAppuses:azurecontainerappsdeployactionv0with:imageToDeploy:mcr。microsoft。comazuredocscontainerappshelloworld:latest 2。)您正在构建和部署映像。steps:name:LogintoAzureuses:azureloginv1with:creds:{{secrets。AZURECREDENTIALS}}name:BuildanddeployContainerAppuses:azurecontainerappsdeployactionv0with:appSourcePath:{{github。workspace}}acrName:mytestacr 3。)您没有dockerfile或构建的映像,但您有运行时堆栈。steps:name:LogintoAzureuses:azureloginv1with:creds:{{secrets。AZURECREDENTIALS}}name:BuildanddeployContainerAppuses:azurecontainerappsdeployactionv0with:appSourcePath:{{github。workspace}}acrName:mytestacrruntimeStack:dotnetcore:7。0 在这些情况下,如果没有手动或通过以前的运行创建容器应用、容器环境或资源组,它将为你创建这些资源。 资源将按如下方式命名:ContainerApp:githubactioncontainerapp资源组:容器应用名称rg容器应用环境:容器应用名称环境 我发现这在大多数情况下并不理想,所以让我们看看我们需要给它什么才能不创建这些。其他参数 因此,若要防止操作创建这些资源,需要为其指定现有资源的名称,或者为其指定要初始创建并随后重用的资源的名称。 然后,可以将这些参数添加到生成和部署容器应用步骤。containerAppName:ContainerAppNamecontainerAppEnvironment:ContainerAppEnvironmentNameresourceGroup:ContainerAppResourceGroup 如果您有要构建和部署的自定义Docker映像,则需要使用这些参数来生成映像并进行部署。这是如果你有一个现有的DockerfileimageToBuild:ContainerRegistryImageName:Tage。g。{{github。sha}}dockerfilePath:PathtoDockerfile 还需要登录到容器注册表才能推送映像,因此还需要以下参数。如果要从私有映像存储库中提取映像,则还需要这些映像。acrName:ContainerRegisteryNameacrUsername:{{secrets。REGISTRYUSERNAME}}acrPassword:{{secrets。REGISTRYPASSWORD}} 我没有使用但可能有用的其他一些是:environmentVariables容器的环境变量列表。键值格式的空格分隔值。用于清除现有值的空字符串。前缀值为secretref:以引用密钥。targetPort容器应用将侦听的目标端口。如果未提供,则对于Python应用程序,此值将为80,对于所有其他受支持的平台,此值将为8080。 干的好!你已经一路走到了最后。