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.
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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!