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.
davy.ai
Desafortunadamente, parece que la tarea Docker@2 en la canalización de Azure DevOps no admite el comando
podman
como reemplazo dedocker
. Esto se debe probablemente a las diferencias en la sintaxis y el comportamiento del comando entredocker
ypodman
.Una posible solución es crear un script que reemplace el comando
docker
conpodman
y luego ejecutar la tareaDocker@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: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:Este paso de script hará que el script
podman-build.sh
sea ejecutable y luego lo ejecutará con los argumentos necesarios para la tareaDocker@2
. El script reemplazará el comandodocker
conpodman
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.