Olá, boa tarde!
Temos como configurar no github actions uma forma para validar se uma determinada imagem/tag já existe no docker hub e evitar que ela seja sobreescrita?
Obrigado.
Olá, boa tarde!
Temos como configurar no github actions uma forma para validar se uma determinada imagem/tag já existe no docker hub e evitar que ela seja sobreescrita?
Obrigado.
Oi Edson, tudo bem?
Isso pode ser feito adicionando uma etapa de verificação antes do processo de envio da imagem para o Docker Hub.
Essa etapa de verificação pode ser implementada usando o comando docker images
para listar as imagens existentes no Docker Hub, e verificando se a imagem/tag especificada já existe na lista. Se a imagem/tag já existir, a etapa de verificação pode ser configurada para interromper o processo de envio para o Docker Hub e exibir uma mensagem de erro.
Aqui está um exemplo de como isso pode ser feito no arquivo de workflow do Github Actions:
on: push
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Build the Docker image
run: docker build -t my-image:latest .
- name: Check if image exists on Docker Hub
run: |
existing_images=$(docker images --format "{{.Repository}}:{{.Tag}}")
if [[ $existing_images == *"my-image:latest"* ]]; then
echo "Image already exists on Docker Hub. Skipping push."
exit 1
fi
- name: Push image to Docker Hub
run: docker push my-image:latest
Neste exemplo, a etapa de verificação é executada após a construção da imagem Docker, e verifica se a imagem my-image:latest
já existe no Docker Hub. Se a imagem já existir, o processo é interrompido e uma mensagem de erro é exibida. Caso contrário, a imagem é enviada para o Docker Hub.
É importante lembrar que essa é apenas uma implementação de exemplo, e que você pode personalizar o código de acordo com suas necessidades e preferências, tudo bem?
Espero ter ajudado e bons estudos,
Abcs!
Olá Natan, tudo bem?
Eu não consegui o resultado esperado com essa implementação:
existing_images=$(docker images --format "{{.Repository}}:{{.Tag}}")
if [[ $existing_images == *"my-image:latest"* ]]; then
echo "Image already exists on Docker Hub. Skipping push."
exit 1
fi
A impressão que tenho que a variável 'existing_images' é um array e não valida corretamente dentro do if.
Porém implementei a solução abaixo e deu certo:
if docker manifest inspect my-image:latest; then
echo "Image already exists on Docker Hub. Skipping push."
exit 1
fi
Nesse exemplo eu dou um inpect na imagem que vou gerar, se existir ele entra dentro do if e retorna o erro, caso contrário ele faz o push da imagem.
Muito obrigado pela sugestão.
Oi Edson,
Opa que bom que deu certo então! :)
Abraços e bons estudos!