练习 - 将 Docker 容器部署到 Azure
你的项目附带了一个发布管道,用于生成解决方案中的项目并将 Web 应用部署到其应用服务。 现在,是时候更新流水线构建,并将项目作为容器进行部署了。
在本单元中,你将学习以下内容:
- 定义一些管道变量,使生成管道更易于维护。
- 将现有 生成 任务替换为用于生成和推送 Docker 容器的统一任务。
- 将现有 部署 任务替换为将应用服务 Web 应用更新为新的容器映像的任务。
- 保存管道以触发生成和发布。
定义要在管道中共享的变量
在这里,你将向 azure-pipelines.yml中定义的现有 YAML 管道添加新的管道变量。
在 Azure DevOps 中,导航到“Pipelines”。
选择管道。
选择 编辑。 请通过从下拉菜单中选择来确保分支被设置为 main。 这会显示 azure-pipelines.yml 文件。
添加下方突出显示的行以添加名为
webRepository和tag的管道变量。 这些内容将用于多个任务,以唯一标识所引用的容器的特定版本。 还可以删除变量buildConfiguration;不再需要它。trigger: - '*' variables: buildConfiguration: 'Release' webRepository: 'web' tag: '$(Build.BuildId)'
替换生成阶段任务
安 迪: 我认为不再需要这些生成任务,因为项目文件夹中的 Dockerfile 已经定义了所需的生成。 但是,我还没有机会查看我们目前可以使用什么来使用 Dockerfile 生成映像。 有什么想法?
Mara:我刚正在查询相关信息。 它似乎应该能够生成容器,甚至可以使用单个任务将其推送到存储库。 我们现在来添加它。
Docker 任务
可以使用 Docker 任务 来生成和部署 Docker 映像。 将整个 生成 阶段替换为下面的 YAML 代码片段。
- 命令:指定要运行的 Docker 命令。
- buildContext:指定生成上下文的路径。
- 存储库:指定存储库的名称。
- dockerfile:指定 Dockerfile 的路径。
- containerRegistry:指定 Docker 注册表服务连接的名称。
- 标记:指定单独的行上的标记列表。 这些标记用于 build、push 和 buildAndPush 命令。
- stage: 'Build'
displayName: 'Build and push'
jobs:
- job: 'Build'
displayName: 'Build job'
pool:
vmImage: 'ubuntu-20.04'
steps:
- task: Docker@2
displayName: 'Build and push the image to container registry'
inputs:
command: buildAndPush
buildContext: $(Build.Repository.LocalPath)
repository: $(webRepository)
dockerfile: '$(Build.SourcesDirectory)/Tailspin.SpaceGame.Web/Dockerfile'
containerRegistry: 'Container Registry Connection'
tags: |
$(tag)
替换部署阶段的任务
安 迪: 嗯,这似乎相当简单。 现在,我们需要查找一项任务,该任务将指示应用服务使用新推送的容器映像版本。
玛拉: 我已经开始了 这不同于将生成部署到 Azure Pipelines 中,但对于在一个任务中完成作业来说足够了。 我们现在来添加它。
适用于容器的 Azure Web 应用任务
用于容器的 Azure Web 应用任务旨在将 Docker 容器部署到 Azure 应用服务。 将整个 部署 阶段替换为下面的 YAML 代码片段。
- appName:指定现有 Azure 应用服务的名称。
- azureSubscription:指定部署的 Azure 资源管理器订阅的名称。
-
imageName:指定完全限定的容器映像名称;例如,
myregistry.azurecr.io/nginx:latest或python:3.7.2-alpine/。
- stage: 'Deploy'
displayName: 'Deploy the container'
dependsOn: Build
jobs:
- job: 'Deploy'
displayName: 'Deploy job'
pool:
vmImage: 'ubuntu-20.04'
variables:
- group: Release
steps:
- task: AzureWebAppContainer@1
inputs:
appName: $(WebAppName)
azureSubscription: 'Resource Manager - Tailspin - Space Game'
imageName: $(RegistryName)/$(webRepository):$(build.buildId)
保存管道以触发生成和发布
从页面右上角选择“ 验证并保存 ”。 键入提交消息,然后选择“ 保存 ”以确认。
选择“运行”,并确保分支设置为main。 完成后,选择 “运行 ”。
选择流水线以查看日志。 生成成功后,选择 AzureWebAppContainer 任务,然后选择 应用服务应用程序 URL 以查看已部署的 Web 应用。
你应该会看到你的 Web 应用正在 App Service 上运行。
安 迪: 这原来很棒! 我认为采用容器对于我们的团队来说可能是一个巨大的胜利。