fbpx

Build Docker Image con Github Actions e push su AWS ECR

 

Generalmente per il build delle immagini Docker su AWS utilizziamo Codebuild da solo o con CodePipeline a seconda della complessità del progetto su cui stiamo lavorando, il tutto gestito e creato con AWS CDK.

Ci sono però casi, che per diversi motivi, ci portano a dover avere un’immagine Docker da pubblicare su ECR o su Docker Hub in modo più rapido, questo è stato il  caso di un progetto, su cui abbiamo lavorato recentemente e che ci ha spinto a scrivere questo articolo, nella speranza che possa servire ad altri.

Ci serviva quindi un sistema di CI/CD per rilasciare in modo veloce immagini Docker su ECR. La scelta è caduta su Github Actions!

Come quasi tutti i sistemi di CI/CD, anche Github Actions utilizza i trigger per azionare i jobs quando si effettuano operazioni su Github.

La codebase di questo progetto è ospitata su Github sotto un Monorepo, quindi la necessità è quella di far scattare la pipeline solo quando viene modificato il Dockerfile del progetto su cui stiamo lavorando, fra poco vedremo come fare.

Come prima operazione dobbiamo creare all’interno del nostro repository un Github Actions Workflow, che sarà ospitato a partire dalla directory radice nel seguente path e che chiameremo:

Il cui contenuto sarà il seguente:

Anche se la sintassi, presente nel file appena creato, è abbastanza chiara ci soffermiamo su alcuni elementi per descriverli meglio, e consigliamo comunque di approfondire il suo funzionamento sulla documentazione ufficiale.

Il primo blocco che vediamo ci permette di limitare l’esecuzione della GitHub Actions solo quando il file Dockerfile viene modificato, attraverso l’evento paths.

poi all’interno del job build specifichiamo la macchina virtuale su cui saranno eseguiti i vari lavori, attenzione GitHub Actions è di base gratuito, ma ci sono dei limiti che si possono consultare nella pagina di fatturazione:

Successivamente ci sono gli steps, che sono delle azioni separate (ovvero dei comandi creati precedentemente e riutilizzati) o dei comandi shell.

In questo workflow ne troviamo 3 particolarmente interessanti:

Da notare come viene utilizzato il riferimento “id”, ovvero serve per essere riutilizzato in altri  jobs o steps. Nel nostro esempio è utilizzato solo l’id login-ecr, per poter popolare la variabile ECR_REGISTRY subito dopo.

A questo punto quello che ci rimane da fare è configurare le chiavi AWS dentro GitHub Actions, in modo che siano iniettate nell’ambiente quando questo è creato.

I permessi da associare all’utente proprietario delle credenziali AWS possono essere trovate a questo URL.

Accedere quindi alla pagina di Settings -> Secrets del repository su cui si vogliono configurare le GitHub Actions:

clicchiamo su “New repository secret”, e procediamo con la creazione delle seguenti variabili:

dove REPO_NAME è il nome del repository ECR creato su AWS, basta inserire solo il nome non tutto l’ARN.

A questo punto se proviamo a modificare il Dockerfile nel nostro progetto e proviamo ad effettuare un push sul repository che lo ospita vedremo la nostra GitHub Actions essere eseguita, ed al termine effettuare il push della nuova immagine Docker su AWS ECR.

Questo è tutto, buon building!

Loreno Edelmondo
Loreno Edelmondo
Articoli: 24

Lascia una risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.