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.

Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Garantire la provenienza e l'integrità degli artefatti prodotti su GitHub
Introduzione alle Container Queries
Paginare i risultati con QuickGrid in Blazor
Conoscere il rendering Server o WebAssembly a runtime in Blazor
Rendere le variabili read-only in una pipeline di Azure DevOps
Eseguire script pre e post esecuzione di un workflow di GitHub
Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
Creare una libreria CSS universale: Immagini
Come EF 8 ha ottimizzato le query che usano il metodo Contains
Gestire gli accessi con Token su Azure Container Registry
Gestione degli eventi nei Web component HTML
Creare una libreria CSS universale - Rotazione degli elementi