Azure Container Registry — Publish From GitHub Actions

Através do Azure Container Registry é possível armazenar imagens privadas do Docker dentro do Azure em sua conta. O Docker também possui o seu repositório para armazenamento de images, o Docker Hub.

A vantagem de ter toda esta estrutura do Azure é que você não precisa outros serviços para gerenciar as imagens geradas do seu sistema, ficando tudo da mesma infraestrutura (IaaS).

As funcionalidades do GitHub Actions permite que você automatize algumas tarefas de CI/CD, build, deploy, test, criação de imagens docker, entre outros.

Perceba que através de um dos repositórios do seu GitHub é possível configurar um fluxo e neste fluxo gerar uma imagem com o código do repositório e enviar esta imagem para o Azure Container Registry, bacana né, então vamos aos passos para que tudo isso funcione.

Create Container Registry

Clique em Container Registry para abrir a próxima imagem.

Preencha as informações conforme sua necessidade e siga em frente (next, next, finish).

Access Keys Configuration

Você deve estar se perguntando, por que usar o password2, eu costumo utilizar sempre o password2 para ferramentas externas no caso aqui esta senha vai ser utilizada pelo GitHub, caso seja necessário resetar a senha, somente este é necessário, a primeira senha eu costumo utilizar para questões internas dentro do próprio azure, pois faz parte da mesma plataforma.

Container Registry Pricing

GitHub Repository

Integrating GitHub and Azure

Para que esta conexão entre os dois funcione, é necessário que o GitHub possua as credenciais de acesso ao Azure, Login server, Username, password2 que eu comentei mais acima.

Lá no GitHub, nas configurações (settings) do repositório que eu criei, eu configurei três secrets conforme a imagem a seguir, cada uma delas contendo o Login server, password2 e Username.

Depois disso, para o mesmo repositório, eu fui até a aba Actions para criar o workflow de geração da imagem e publicação no Azure Registry Container como mostrado nos passos da imagens a seguir.

Clique em New workflow.

Em seguida, procure pela opção “Docker image”, preste bastante atenção, pois inicialmente nem todas as opções vão aparecer, então você deve usar o botáo More continuous integration workflow.

Clique em Set up this workflow

Do lado direito, você vai ver a opção Marketplace, procure no Marketplace pelo serviço Azure Container Registry Login, perceba que este serviço é by Azure, tome cuidado com serviços que não sejam oficiais. Clique sobre ele e você vai ter a tela exatamente como a da imagem a seguir

No Marketplace, ao clicar sobre o serviço, você vai ver uma prévia da configuração ( snippet) necessária para o uso adequado.

Eu já aproveitei e deixei o arquivo de configuração do workflow (.yml) prontinho para ser utilizado. Você vai perceber uma diferença, que foi uma customização para podermos usar as secrets que criamos para poder ser autorizado pelo Azure, é desta forma que é feito.

Por fim, clique em “Start commit”, preencha as informações conforme sua preferência e clique em “Commit new file”.

Dockerfile

yml Troubleshooting

every step must define a “uses” or “run” key

Significa que a identação está errada ou um “uses” está faltando em um nó que representa uma determinada ação, sendo que os nós que possuem o “run”, não precisam do “uses”. Se você seguir o arquivo que eu deixei como modelo vai funcionar.

O próximo erro está relacionado ao nome do repositório, deve estar sempre com letras minúsculas, caso contrário você pode se deparar com o erro abaixo.

invalid argument “*/AzureRegistryGitActions:latest” for “-t, — tag” flag: invalid reference format: repository name must be lowercase

O próximo problema está relacionado ao local onde seu arquivo “Dockerfile” está localizado, ele deve estar na raiz do repositório, pois é na raiz que o papiline de execução vai utilizar como contexto para encontrar o “Dockerfile” e a partir dele buscar os arquivos do projeto que estão na pasta “/src”.

unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /home/runner/work/AzureRegistryGitActions/AzureRegistryGitActions/Dockerfile: no such file or directory

Se o seu workflow der certo, uma publicação de uma imagem vai ser apresentada lá no seu Azure Container Registry e sucesso!

GitHub Packages

Adicionei um New workflow e selecionei o Marketplace diferente do anterior, como mostrado na imagem a seguir.

Ao clicar em Set up this workflow, como você já está dentro do GitHub, não é necessário realizar nenhuma alteração no arquivo yml (o meu foi criado como mostrado a seguir) que será criado, basta apenas realizar o commit e pronto.

Por fim, no GitHub você vai ver que há um pacote associado ao seu repositório, ao qual você pode realizar o pull em seu Docker Desktop e executar localmente.

Originally published at http://alextochetto.com on July 30, 2020.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store