gpt4 book ai didi

azure - 将 Azure DevOps 中选定的工件作为 docker 镜像部署到 ECR

转载 作者:行者123 更新时间:2023-12-02 07:54:26 25 4
gpt4 key购买 nike

环境

  • Azure Dev Ops(代码存储库和管道触发器)
  • AWS ECR/ECS(目标部署平台)
  • Docker
  • .NET Core Web 应用程序 (v5.0)

现状

目前正在使用 dotnet build(powershell 脚本)构建应用程序,并使用 azurepipeline.yml 将 zip 文件推送到 Azure DevOps 工件。这效果很好。我为 ECR Push 添加了另一个任务,并且还使用源代码中的 Dockerfile 将生成的 docker 镜像推送到 ECR。

业务问题

我们希望能够在 Azure Artifact 中选择特定的构建(例如 0.1.24)(使用变量提供版本号),并使用相应的二进制文件和 Dockerfile 生成 Docker 构建。我找不到办法这样做。具体任务如下:-

  1. 部署用户使用工件 ID 或名称更新变量“versionNoToDeploy”
  2. 部署用户运行特定管道
  3. 管道找到工件(假设其有效,否则发送错误),在临时位置解压缩包(-需要帮助)
  4. 管道运行 dockerfile 来构建镜像(已知且有效)
  5. 管道将此镜像推送到 ECR(已知且有效)

目的是继续构建分支,直到我们获得稳定的构建。此版本手动部署在测试服务器上并进行测试。一旦构建获得认证,就需要将其推送到生产 ECR/ECS 实例。

我们的管道(仅限特定代码)

- pwsh: ./build.ps1 --target Clean Protolint Compile --runtime $(runtime) 
displayName: ⚙️ Compile

- task: Docker@2
displayName: Build
inputs:
command: build
repository: appRepo
tags: |
$(Build.BuildId)
deploy
addPipelineData: true
Dockerfile: src\DockerfileNew

- task: ECRPushImage@1
inputs:
awsCredentials: 'AWS ECR Connection'
regionName: 'ap-south-1'
imageSource: 'imagename'
sourceImageName: 'myApplication'
sourceImageTag: 'deploy'
repositoryName: 'devops-demo'
outputVariable: 'imageTagOutputVar'

- pwsh: ./build.ps1 --target Test Coverage --skip
displayName: 🚦 Test

- pwsh: ./build.ps1 --target BuildImage Pack --runtime $(runtime) --skip
displayName: 📦 Pack

- pwsh: ./build.ps1 --target Publish --runtime $(runtime) --skip
displayName: 🚚 Publish

工件详细信息

enter image description here

可以提供所需的任何具体方面

最佳答案

最后,在对管道进行了大量研究并自定义调整各个步骤之后,我得出了以下内容(摘录的 yml)。

这涉及将构建版本存储在变量中,该变量在管道的每个步骤中引用。管理员必须决定是否需要通用构建,生成工件;或者只是将特定版本部署到 AWS。具有 build-id 的变量会被有条件地评估,并基于此执行或绕过步骤。

- pwsh: ./build.ps1 --target Clean Protolint Compile --runtime $(runtime)
condition: eq(variables['artifactVersionToPush'], '')
displayName: ⚙️ Compile

- task: DownloadBuildArtifacts@0
condition: ne(variables['artifactVersionToPush'], '')
inputs:
buildType: 'specific'
project: 'NitinProj'
pipeline: 'NitinProj'
buildVersionToDownload: specific
buildId: $(artifactVersionToPush)
downloadType: 'single'
artifactName: 'app'
downloadPath: '$(System.ArtifactsDirectory)' #(this needs to be mentioned as default is Build directory)

- task: ExtractFiles@1
displayName: Extract Artifact to temp location
condition: ne(variables['artifactVersionToPush'], '')
inputs:
archiveFilePatterns: '$(System.ArtifactsDirectory)/app/*.zip' #path need update
cleanDestinationFolder: false
overwriteExistingFiles: true
destinationFolder: src

- task: Docker@2
displayName: Docker Build image with compiled code in artifact
condition: ne(variables['artifactVersionToPush'], '')
inputs:
command: build
repository: myApp
tags: |
$(Build.BuildId)
deploy
addPipelineData: true
Dockerfile: src\DockerfileNew

- task: ECRPushImage@1
displayName: Push built image to AWS ECR
condition: ne(variables['artifactVersionToPush'], '')
inputs:
awsCredentials: 'AWS ECR Connection'
regionName: 'ap-south-1'
imageSource: 'imagename'
sourceImageName: 'myApp'
sourceImageTag: 'deploy'
pushTag: '$(Build.BuildId)'
repositoryName: 'devops-demo'
outputVariable: 'imageTagOutputVar'

- pwsh: ./build.ps1 --target Test Coverage --skip
condition: eq(variables['artifactVersionToPush'], '')
displayName: 🚦 Test

- pwsh: ./build.ps1 --target BuildImage Pack --runtime $(runtime) --skip
condition: eq(variables['artifactVersionToPush'], '')
displayName: 📦 Pack

- pwsh: ./build.ps1 --target Publish --runtime $(runtime) --skip
condition: eq(variables['artifactVersionToPush'], '')
displayName: 🚚 Publish

我将更新此 yml 以将步骤组织到作业中,但这是一个优化故事..:)

关于azure - 将 Azure DevOps 中选定的工件作为 docker 镜像部署到 ECR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68344018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com