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
Disabilitare le run concorrenti di una pipeline di Azure DevOps
Migliorare l'organizzazione delle risorse con Azure Policy
Gestione degli stili CSS con le regole @layer
Simulare Azure Cosmos DB in locale con Docker
Combinare Container Queries e Media Queries
Usare le navigation property in QuickGrid di Blazor
Configurare il nome della run di un workflow di GitHub in base al contesto di esecuzione
Collegare applicazioni server e client con .NET Aspire
Ottimizzare le pull con Artifact Cache di Azure Container Registry
Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
Creare un webhook in Azure DevOps