使用Azure DevOps和Docker Hub实现持续集成和部署

在现代软件开发中,持续集成(CI)和持续部署(CD)是提高开发效率、减少错误和加快产品上市时间的关键实践。本文将指导如何使用Azure DevOps和Docker Hub来实现.NET Core Web应用的自动化构建、测试和部署。

准备工作

在开始之前,确保已经具备以下条件:

  • 一个GitHub仓库,用于存放.NET Core Web应用代码。
  • 一个可以运行的ASP.NET Core Web应用。
  • 一个为应用构建的Docker镜像。
  • 一个运行中的容器,用于本地托管应用。

Docker Hub账户设置

首先,需要在Docker Hub上注册一个账户,并创建一个仓库来存储应用Docker镜像。

使用以下命令为本地镜像打上Docker Hub仓库的标签,并授权Docker客户端,最后将镜像推送到Docker Hub:

$ docker tag <image-name> <namespace>/<repository>:<tag> // 示例 $ docker tag webapp quickdevnotes/webapp:v1 // 登录Docker Hub账户 $ docker login username: password: // 推送到Docker Hub $ docker push quickdevnotes/webapp:v1

注意,如果使用的是私有仓库,需要先登录,然后才能推送镜像。否则,推送操作会因为授权错误而失败。

Azure DevOps项目设置

接下来,需要注册或登录Azure DevOps账户,并创建一个组织以及项目。

Azure DevOps中,选择“创建项目”并提供必要的信息。在“高级”部分,可以根据需要进行设置。

持续集成(构建流水线)

现在,将自动化之前手动执行的步骤。在Azure DevOps中,选择“流水线” > “构建”并点击“新建流水线”。

Azure流水线需要连接到应用代码仓库。在“连接”标签页中,选择GitHub,并授权Azure Pipelines访问GitHub仓库。

授权完成后,将看到一个GitHub仓库列表。从列表中选择应用仓库,并提示安装Azure Pipelines。

Azure流水线会分析应用仓库,并提供一个基本的azure-pipelines.yml文件。这个文件位于GitHub仓库根目录,Azure构建流水线使用它来执行构建应用、执行测试、构建Docker镜像等任务。

以下是构建流水线的azure-pipelines.yml文件示例:

trigger: - master pool: vmImage: 'Ubuntu-16.04' variables: imageName: 'quickdevnotes/webapp:$(build.buildNumber)' steps: - script: dotnet test WebApp.Tests/WebApp.Tests.csproj --logger trx displayName: Run unit tests - task: PublishTestResults@2 condition: succeededOrFailed() inputs: testRunner: VSTest testResultsFiles: '**/*.trx' - task: Docker@1 displayName: Build an image inputs: command: Build an image containerregistrytype: Container Registry dockerRegistryEndpoint: DockerHub dockerFile: Dockerfile imageName: $(imageName) imageNamesPath: restartPolicy: always - task: Docker@1 displayName: Push an image inputs: command: Push an image containerregistrytype: Container Registry dockerRegistryEndpoint: DockerHub dockerFile: Dockerfile imageName: $(imageName) imageNamesPath: restartPolicy: always

注意,生成的文件可能与这里看到的不同,因为已经根据需要更新了文件。

CI任务详解

让详细看看构建文件中定义的任务。将保持在高层次上,以保持本系列的简单性。

触发器指定了推送到哪个分支将触发持续集成流水线运行。在例子中,是master分支。如果想使用不同的分支,只需更改分支名称。如果不指定任何分支,任何分支的推送都将触发构建。

变量部分用于声明在流水线中想要使用的任何变量。例如,在这里创建了一个变量imageName,它将被设置为想要创建的Docker镜像的名称。

已经在应用中添加了一些基本的单元测试。上面的脚本将在每次构建运行时执行这些测试。还可以从这些测试运行中获取测试报告。

上述两个任务中的第一个任务使用仓库根目录下的Dockerfile构建Docker镜像。构建镜像后,第二个任务将该镜像推送到Docker Hub仓库。

为了将镜像推送到Docker Hub仓库,构建代理上的Docker客户端需要先授权。这与手动推送镜像时所做的类似。

Docker Registry服务连接

在导航窗格的左下角,选择“项目设置”。然后在“流水线”下选择“服务连接”,应该在这里看到GitHub连接。

要添加Docker Registry连接,请单击“新建服务连接”,然后从列表中选择“Docker Registry”。

在下一个对话框窗口中,选择“Docker Hub”作为注册表类型,并将“DockerHub”(必须与构建任务中的dockerRegistryEndpoint相同)设置为连接名称。

然后,提供Docker Hub账户的Docker ID和密码。电子邮件是可选的。请确保选中“允许所有流水线使用此连接”。

可以使用“验证此连接”链接来验证连接。点击“确定”,就完成了。

测试构建流水线

相信,到目前为止,已经有足够的信息来自定义持续集成流水线了。好了,是时候测试它是否按预期的那样工作了。

转到“流水线” > “构建”,然后选择“队列”来排队构建。如果没有错误,应该看到一个正在进行的构建。

构建流水线的最后一个任务成功地将新构建的Docker镜像推送到了Docker Hub。注意上面的图像标签,它等于上面的构建编号:

为了进行最终测试,更改应用代码并将其推送到master分支。这将触发构建,将看到提交消息作为构建标题:

注意构建描述告诉构建触发器是什么,这证明了它不是手动触发的。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485