【问题标题】:Using podman instead of docker for the Docker@2 task in Azure DevOps在 Azure DevOps 中为 Docker@2 任务使用 podman 而不是 docker
【发布时间】:2021-11-30 07:45:46
【问题描述】:

我们的构建代理正在运行 Podman 3.4.2,并且每个终端会话都有一个全局别名,它只是将 docker 替换为 podman,因此命令 docker --version 会产生 podman version 3.4.2

目标是将 podman 用于 Azure DevOps 管道中的 Docker@2 任务:

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) 

事实证明,我的假设有点天真,因为 ado_agent 没有这个假设:

##[错误]未处理:无法找到可执行文件:'docker'。请验证文件路径是否存在,或者该文件是否可以在 PATH 环境变量指定的目录中找到。还要检查文件模式以验证文件是否可执行。

有没有办法让替换工作不费吹灰之力?如果可以避免的话,我会避免自己编写所有脚本以使用 podman 而不是 docker 并将其推送到注册表。

【问题讨论】:

  • 您是否尝试过将 docker 符号链接到 podman?还是创建一个可执行的 bash 脚本,将所有参数从它传递给 podman?
  • 不,我没有。

标签: azure-devops azure-pipelines podman


【解决方案1】:

因为我需要在这方面取得进展,所以我决定沿着 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) 

如果您决定走这条路,请确保不要在 yml 文件中将您的服务主体和密码公开为变量,而是将它们创建为机密。

我会保持这个问题的开放性 - 也许在处理 GNU/Linux 方面有更多专业知识的人会找到更优雅的方法。

【讨论】:

    猜你喜欢
    • 2019-07-15
    • 1970-01-01
    • 2022-11-18
    • 2021-01-28
    • 2021-02-07
    • 2021-02-23
    • 2018-06-18
    • 2022-12-23
    • 1970-01-01
    相关资源
    最近更新 更多