Anche se non è un tema nuovo, poichè le sue origini risalgono circa al 2013, ChatOps è una nuova metodologia che sta emergendo sempre di più per facilitare il lavoro delle persone che si interfacciano con la tecnologia. Consente, in breve, di utilizzare i messaggi per comunicare in modo automatico con una persona, che può essere il developer di un team, piuttosto che il manager. In base al livello di automation che abbiamo previsto, potrebbe addirittura rimpiazzare quasi del tutto le email.
Vediamone un esempio concreto. Assumiamo di aver creato una pull request, in cui siamo andati a cambiare dei file di Terraform. Questo implica che l'infrastruttura potrebbe variare di costo, pertanto potrebbe essere utile chiedere, in un messaggio nella issue aperta in GitHub, quali sono i costi attualmente sostenuti e previsti per il mese corrente prima di approvare la change e metterla in produzione.
Il tutto parte dal trigger, che deve essere relativo ad un evento su un commento, il cui body è qualcosa che possiamo intercettare ed elaborare in modo preciso.
name: (ChatOps) Cost estimation on: issue_comment: types: [created] jobs: cost-estimation: runs-on: ubuntu-latest if: contains(github.event.comment.body, 'What are the costs for this month?')
In questo esempio siamo stati molto stringenti, ma è normale che con il linguaggio che usiamo tutti i giorni potrebbero esserci diverse variazioni a questo. Al momento questo check ci serve solo per capire se il workflow deve poter girare oppure no, perchè commenti nelle issue potrebbero essercene decine o centinaia al giorno, per cui vogliamo filtrare l'esecuzione il prima possibile, ma è altrettanto efficace integrare LUIS (language understanding) per impostare diverse frasi.
A questo punto è consigliabile rispondere immediatamente con un messaggio temporaneo, che indica che stiamo processando i costi. Infatti, il workflow potrebbe metterci diversi minuti per l'esecuzione, ma non vogliamo dare l'impressione agli utenti che non siamo responsivi.
steps: - name: Create placeholder comment uses: peter-evans/create-or-update-comment@v2 with: issue-number: ${{ github.event.issue.number }} body: | The costs are being calculated... hold on :money_with_wings:
A questo punto usiamo la nostra logica per connetterci ad Azure e calcolare i costi e, infine, postiamo un messaggio riassuntivo sempre nella issue di riferimento.
- name: Azure login uses: Azure/login@v1 with: creds: ${{ secrets.AZURE_CREDENTIALS }} - name: Get spending shell: pwsh run: | $fileSummaryPath = "${{ github.workspace }}/summary.md" "The actual costs are circa $actual ¤." >> $fileSummaryPath "The expected costs for the given month are $estimatedCosts ¤. $spendingEmoji" >> $fileSummaryPath - name: Prepare summary for reporting id: get-comment-body run: | body="$(cat ${{ github.workspace }}/summary.md)" body="${body//'%'/'%25'}" body="${body//$'\n'/'%0A'}" body="${body//$'\r'/'%0D'}" echo "::set-output name=body::$body" - name: Create comment uses: peter-evans/create-or-update-comment@v2 with: issue-number: ${{ github.event.issue.number }} body: ${{ steps.get-comment-body.outputs.body }}
Il risultato finale sarà simile al seguente.
![](https://www.dopsitalia.com/script/images/74.jpg)
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Sfruttare i KeyedService in un'applicazione Blazor in .NET 8
Usare le collection expression per inizializzare una lista di oggetti in C#
Sfruttare al massimo i topic space di Event Grid MQTT
Gestire i null nelle reactive form tipizzate di Angular
Disabilitare automaticamente un workflow di GitHub
Configurare il nome della run di un workflow di GitHub in base al contesto di esecuzione
Creazione di plugin per Tailwind CSS: espandere le Funzionalità del Framework
Miglioramenti nelle performance di Angular 16
Sostituire la GitHub Action di login su private registry
Esportare ed analizzare le issue di GitHub con la CLI e GraphQL
Creare una custom property in GitHub
Eseguire query verso tipi non mappati in Entity Framework Core