es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Utilizando Podman en lugar de Docker para la tarea Docker@2 en Azure DevOps.

Nuestro agente de compilación utiliza Podman 3.4.2 y tiene un alias global en su lugar para cada sesión de terminal que simplemente reemplaza “docker” con “podman”, por lo que el comando docker --version produce como resultado podman version 3.4.2.

El objetivo es utilizar Podman para la tarea Docker@2 en un canal de Azure DevOps:

steps:
- task: Docker@2
  displayName: Construir y enviar una imagen al registro de contenedores
  inputs:
    command: buildAndPush
    repository: aspnet-web-mhi
    dockerfile: $(dockerfilePath)
    containerRegistry: $(dockerRegistryServiceConnection)
    tags: |
      $(tag)

Resulta que fui un poco ingenuo en mis suposiciones, ya que el ado_agent no está aceptando la solución:

Unhandled: Unable to locate executable file: ‘docker’. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also check the file mode to verify the file is executable.

¿Existe alguna manera de hacer que el reemplazo funcione sin demasiado esfuerzo? Me gustaría evitar tener que hacer un script para usar Podman en lugar de Docker y enviarlo a un registro si puedo evitarlo.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Desafortunadamente, parece que la tarea Docker@2 en la canalización de Azure DevOps no admite el comando podman como reemplazo de docker. Esto se debe probablemente a las diferencias en la sintaxis y el comportamiento del comando entre docker y podman.

    Una posible solución es crear un script que reemplace el comando docker con podman y luego ejecutar la tarea Docker@2 utilizando este script modificado. Esto se puede hacer usando un paso de script de shell personalizado en la canalización.

    Por ejemplo, puedes crear un script en tu repositorio llamado podman-build.sh con el siguiente contenido:

    #!/bin/bash
    
    # Reemplace docker con podman.
    alias docker=podman
    
    # Ejecute la tarea Docker@2 con el comando modificado.
    docker $@
    

    Luego puedes modificar tu canalización para incluir un paso de script de shell personalizado antes de la tarea Docker@2, de la siguiente manera:

    steps:
    - script: |
        chmod +x ./podman-build.sh
        ./podman-build.sh buildAndPush --repository aspnet-web-mhi --dockerfile $(dockerfilePath) --container-registry $(dockerRegistryServiceConnection) --tags $(tag)
      displayName: Construir y enviar una imagen al registro de contenedores
    

    Este paso de script hará que el script podman-build.sh sea ejecutable y luego lo ejecutará con los argumentos necesarios para la tarea Docker@2. El script reemplazará el comando docker con podman y ejecutará la tarea con el comando modificado.

    Ten en cuenta que esta solución alternativa puede no funcionar en todos los escenarios y debes probarla a fondo antes de depender de ella para tu canalización.

Comments are closed.