Mar*_*rco 8 azure-devops azure-pipelines podman
我们的构建代理正在运行 Podman 3.4.2,并且每个终端会话都有一个全局别名,只需将 docker 替换为 podman,因此该命令docker --version会产生podman version 3.4.2结果。
目标是使用 podman 来执行Docker@2Azure DevOps 管道中的任务:
steps:
- task: Docker@2
displayName: Build and push an image to container registry
inputs:
command: buildAndPush
repository: aspnet-web-mhi
dockerfile: $(dockerfilePath)
containerRegistry: $(dockerRegistryServiceConnection)
tags: |
$(tag)
Run Code Online (Sandbox Code Playgroud)
事实证明我的假设有点天真,这会起作用,因为 ado_agent 没有这些:
##[错误]未处理:无法找到可执行文件:“docker”。请验证文件路径是否存在,或者是否可以在 PATH 环境变量指定的目录中找到该文件。还要检查文件模式以验证文件是否可执行。
有没有一种方法可以让替换工作顺利进行?如果可以避免的话,我会避免自己编写所有脚本以使用 podman 而不是 docker 并将其推送到注册表。
由于我需要在这方面取得进展,因此我决定沿着 bash 路线手动构建、推送、拉取和运行图像。这是它的要点:
steps:
- task: Bash@3
displayName: Build Docker Image for DemoWeb
inputs:
targetType: inline
script: |
podman build -f $(dockerfilePath) -t demoweb:$(tag) .
- task: Bash@3
displayName: Login and Push to ACR
inputs:
targetType: inline
script: |
podman login -u $(acrServicePrincipal) -p $(acrPassword) $(acrName)
podman push demoweb-mhi:$(tag) $(acrName)/demoweb:$(tag)
- task: Bash@3
displayName: Pull image from ACR
inputs:
targetType: inline
script: |
podman pull $(acrName)/demoweb:$(tag) --creds=$(acrServicePrincipal):$(acrPassword)
- task: Bash@3
displayName: Run container
inputs:
targetType: inline
script: |
podman run -p 8080:80 --restart unless-stopped $(acrName)/demoweb:$(tag)
Run Code Online (Sandbox Code Playgroud)
如果您决定走这条路线,请确保不要将您的服务主体和密码公开为 yml 文件中的变量,而是将它们创建为机密。
我将保留这个问题 - 也许在处理 GNU/Linux 方面具有更多专业知识的人会找到一种更优雅的方法。
| 归档时间: |
|
| 查看次数: |
4227 次 |
| 最近记录: |