Al giorno d'oggi, quando parliamo di DevOps, non possiamo prescindere dall'affrontare il tema di Infrastructure As Code (IaC), in cui andiamo a definire l'infrastruttura come codice, in modo tale che sia versionata e gestita dal source control esattamente come il codice applicativo. Strumenti come Terraform, infatti, sono piuttosto diffusi, ma la loro governance diventa sempre più complessa al crescere dell'infrastruttura stessa.
Una azione che ci può venire comoda quando uniamo il mondo di Terraform con le GitHub Actions, è fare in modo di elencare le change che stiamo andando ad applicare, così che sia più facile, visivamente, capire qual è l'output di un plan senza dover necessariamente analizzare tutti i log del workflow. Supponiamo quindi di avere uno o più file Terraform e di dover fare il deploy in Azure dell'infrastruttura:
steps: - uses: actions/checkout@v4 - run: terraform init id: init env: ARM_CLIENT_ID: ${{ secrets.ARM_CLIENT_ID }} ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }} ARM_TENANT_ID: ${{ secrets.ARM_TENANT_ID }} ARM_SUBSCRIPTION_ID: ${{ secrets.ARM_SUBSCRIPTION_ID }} - run: terraform fmt -check - run: terraform validate -no-color - name: Terraform Plan id: plan env: ARM_CLIENT_ID: ${{ secrets.ARM_CLIENT_ID }} ARM_CLIENT_SECRET: ${{ secrets.ARM_CLIENT_SECRET }} ARM_TENANT_ID: ${{ secrets.ARM_TENANT_ID }} ARM_SUBSCRIPTION_ID: ${{ secrets.ARM_SUBSCRIPTION_ID }} run: terraform plan -no-color
In questi primi passaggi, eseguiamo solo il clone del codice sorgente in locale e, quindi, lanciamo i comandi base di terraform per generare il piano delle modifiche che andrà ad applicare all'infrastruttura su Azure. In questo caso, non c'è una grande variazione rispetto a ciò che faremo localmente, se non che il workflow potrà essere condiviso da tutta l'organizzazione.
L'output del plan, però, rimane nascosto (a meno di utilizzare altri strumenti come Terraform Cloud o altri) all'interno del workflow, mentre sarebbe decisamente più comodo averlo disponibile su una issue o sulla pull request che ha triggerato il workflow. Per questo, è sufficiente aggiungere uno step che legge l'output dello step che ha eseguito il plan e mandarlo come risposta:
- name: Add Plan Comment uses: actions/github-script@v7 env: PLAN: "terraform\n${{ steps.plan.outputs.stdout }}" with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | const output = `#### Terraform plan ??\`${{ steps.init.outcome }}\` #### Terraform Plan 📖\`${{ steps.plan.outcome }}\` Show Output \`\`\`${process.env.PLAN}\`\`\` *Pusher: @${{ github.actor }}, Action: \`${{ github.event_name }}\`, Workflow: \`${{ github.workflow }}\`*`; github.rest.issues.createComment({ issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, body: output })
Con un po' di manipolazione si possono far vedere solamente le diff in markdown, piuttosto che operazioni più complesse, a nostro gusto.
L'output generato sarà simile al seguente:

Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Anonimizzare i dati sensibili nei log di Azure Front Door
Supportare la sessione affinity di Azure App Service con Application Gateway
Bloccare l'esecuzione di un pod in mancanza di un'artifact attestation di GitHub
Managed deployment strategy in Azure DevOps
Rendere le variabili read-only in una pipeline di Azure DevOps
Gestione CSS in Blazor con .NET 9
Rendere i propri workflow e le GitHub Action utilizzate più sicure
Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
Utilizzare WhenEach per processare i risultati di una lista di task
Creare agenti facilmente con Azure AI Agent Service
Ottenere un token di accesso per una GitHub App
Referenziare un @layer più alto in CSS
I più letti di oggi
- Sfruttare i nuovi overload di TimeSpan.From* per creare timespan usando numeri interi
- Documentare i servizi REST con Swagger e OpenAPI con .NET 9
- Inviare i comandi SQL generati da Entity Framework alla console di Visual Studio
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Gestione CSS in Blazor con .NET 9
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!