Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Evitar enviar a mesma imagem para o dockerhub

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.

3 respostas

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!

solução!

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!