Ir para o conteúdo

Usando GitHub Actions para atualizar o seu Bot

Com o GitHub Actions é possível fazer updates, deploys e releases automáticos para o Orquestrador BotCity Maestro, sem a necessidade de processos manuais.

Passaremos por um guia prático nessa seção, você pode acessar mais informações e detalhes no nosso repositório.

Se você ainda não conhece GitHub Actions, visite a documentação oficial do GitHub.

Configurando o projeto

Primeiro é necessário criar uma pasta chamada .github no seu projeto e dentro dela criar outra pasta chamada workflows, nesta pasta ficarão os arquivos .yml.

A estrutura de pasta deverá ficar dessa forma:

.
└── .github
  └── workflows
    ├── update_bot.yml
    └── deploy_and_release.yml
...

Para ler mais sobre criações de workflows no GitHub Actions, visite a documentação do GitHub.

Crie o seu primeiro workflow

O primeiro workflow que criaremos será de atualização de um robô existente. Vamos utilizar um evento em uma branch específica para acionar a atualização.

Definiremos:

  • Evento: push
  • Branch: main

Ou seja, toda vez que houver um push na branch main, o workflow será acionado.

Importante

Para esse caso, é necessário haver uma Automação previamente criada no Orquestrador BotCity Maestro. Sugestão: Faça o primeiro deploy utilizando o recurso de Easy Deploy.

Capturando o evento definido

Crie um arquivo chamado update_bot.yml dentro da pasta workflows.

No início deste arquivo, vamos colocar o nome do workflow e o evento que definimos, da seguinte forma:

name: Atualizar a versão mais recente do Bot no Orquestrador Maestro.

on:
  push:
    branches:
      - main

Gerando o build do Bot

Nessa etapa precisamos como pré-requisito um arquivo chamado build.sh na raiz do projeto que contenha os comandos necessários para compilar o Bot.

jobs:
  update-latest:
    name: Atualização de versão do Bot
    # Executando na versão mais recente do Ubuntu
    runs-on: ubuntu-latest
    steps:
      # Instalando o projeto
      - uses: actions/checkout@v4
      # Garante que o script build.sh possa ser executado
      - name: Obtenha permissão para utilizar o build.
        run: chmod +x build.sh
      # Executa o script de build para compilar o projeto
      - name: Executando o build.
        run: ./build.sh
jobs:
  update-latest:
    name: Atualização de versão do Bot.
    # Executando na versão mais recente do Ubuntu
    runs-on: ubuntu-latest
    steps:
      # Instalando o Java
      - uses: actions/setup-java@v3
      # Instalando o projeto
      - uses: actions/checkout@v4
      # Garante que o script build.sh possa ser executado
      - name: Obtenha permissão para utilizar o build.
        run: chmod +x build.sh
      # Executa o script de build para compilar o projeto
      - name: Executando o build.
        run: ./build.sh
jobs:
  update-latest:
    name: Atualização de versão do Bot.
    # Executando na versão mais recente do Ubuntu
    runs-on: ubuntu-latest
    steps:
      # Instalando o projeto
      - uses: actions/checkout@v4
      # Garante que o script build.sh possa ser executado
      - name: Obtenha permissão para utilizar o build.
        run: chmod +x build.sh
      # Executa o script de build para compilar o projeto
      - name: Executando o build.
        run: ./build.sh
jobs:
  update-latest:
    name: Atualização de versão do Bot.
    # Executando na versão mais recente do Ubuntu
    runs-on: ubuntu-latest
    steps:
      # Instalando o projeto
      - uses: actions/checkout@v4
      # Garante que o script build.sh possa ser executado
      - name: Obtenha permissão para utilizar o build.
        run: chmod +x build.sh
      # Executa o script de build para compilar o projeto
      - name: Executando o build.
        run: ./build.sh

Importante

As etapas descritas podem ser adaptadas para cada projeto, caso necessite adicione mais etapas dentro de steps.

Utilizando a action

Com a etapa anterior concluida, vamos adicionar o BotCity Action que fará a atualização do Bot no Orquestrador BotCity Maestro.

Nessa etapa, é necessário configurar as variáveis de ambiente dentro do repositório no GitHub. Vamos adicionar as credenciais para acesso ao Orquestrador BotCity Maestro: LOGIN, SERVER e KEY. Você encontra essas informações em Amb. de Desenvolvedor, dentro do Orquestrador.

Aviso

Sempre configure as suas credenciais nos secrets do repositório por motivos de segurança. Não é recomendável passar essas informações diretamente no código.

Com as secrets prontas, ainda dentro de steps, adicione as configurações da action:

      - name: Utilizando a action Botcity.
        # Usando a versão v1.0.6 do botcity-action-bots
        uses: botcity-dev/botcity-action-bots@v1.0.6
        with:
          # Use a função de atualização
          update: true
          # ID do bot no Maestro
          botId: 'exemplo'
          # Tecnologia utilizada no bot
          technology: 'python'
          # Caminho da raiz do projeto onde ficará o .zip/.jar gerado.
          botPath: './bot.zip'
        env:
          # As secrets devem ser configurados em seu repositório
          LOGIN: ${{ secrets.LOGIN }}
          SERVER: ${{ secrets.SERVER }}
          KEY: ${{ secrets.KEY }}
      - name: Utilizando a action Botcity.
        # Usando a versão v1.0.6 do botcity-action-bots
        uses: botcity-dev/botcity-action-bots@v1.0.6
        with:
          # Use a função de atualização
          update: true
          # ID do bot no Maestro
          botId: 'exemplo'
          # Tecnologia utilizada no bot
          technology: 'java'
          # Caminho da raiz do projeto onde ficará o .zip/.jar gerado
          botPath: './dist/bot-jar-with-dependencies.jar'
        env:
          # As secrets devem ser configurados em seu repositório
          LOGIN: ${{ secrets.LOGIN }}
          SERVER: ${{ secrets.SERVER }}
          KEY: ${{ secrets.KEY }}
      - name: Utilizando a action Botcity.
        # Usando a versão v1.0.6 do botcity-action-bots
        uses: botcity-dev/botcity-action-bots@v1.0.6
        with:
          # Use a função de atualização
          update: true
          # ID do bot no Maestro
          botId: 'exemplo'
          # Tecnologia utilizada no bot
          technology: 'javascript'
          # Caminho da raiz do projeto onde ficará o .zip/.jar gerado
          botPath: './bot.zip'
        env:
          # As secrets devem ser configurados em seu repositório
          LOGIN: ${{ secrets.LOGIN }}
          SERVER: ${{ secrets.SERVER }}
          KEY: ${{ secrets.KEY }}
      - name: Utilizando a action Botcity.
        # Usando a versão v1.0.6 do botcity-action-bots
        uses: botcity-dev/botcity-action-bots@v1.0.6
        with:
          # Use a função de atualização
          update: true
          # ID do bot no Maestro
          botId: 'exemplo'
          # Tecnologia utilizada no bot
          technology: 'typescript'
          # Caminho da raiz do projeto onde ficará o .zip/.jar gerado
          botPath: './bot.zip'
        env:
          # As secrets devem ser configurados em seu repositório
          LOGIN: ${{ secrets.LOGIN }}
          SERVER: ${{ secrets.SERVER }}
          KEY: ${{ secrets.KEY }}

Atenção

Dentro de with indicamos os parâmetros a serem utilizados, lembre-se de substituir os valores:

  • botId: ID do seu Bot no Orquestrador BotCity Maestro.
  • technology: tecnologia utilizada no Bot.
  • botPath: caminho do arquivo gerado pelo build.
  • version: a versão do Bot.
  • repositoryLabel: nome do repositório do Bot.

Os parâmetros são obrigatórios nas seguintes ações:

  • deploy: botId, technology, botPath, version, repositoryLabel
  • uptade: botId, technology, botPath
  • release: botId, technology, botPath, version

Arquivo completo

name: Atualizar a versão mais recente do Bot no Orquestrador Maestro.

on:
  push:
    branches:
      - main

jobs:
  update-latest:
    name: Atualização de versão do Bot
    # Executando na versão mais recente do Ubuntu
    runs-on: ubuntu-latest
    steps:
      # Instalando o projeto
      - uses: actions/checkout@v4
      # Garante que o script build.sh possa ser executado
      - name: Obtenha permissão para utilizar o build.
        run: chmod +x build.sh
      # Executa o script de build para compilar o projeto
      - name: Executando o build.
        run: ./build.sh
      - name: Utilizando a action Botcity.
        # Usando a versão v1.0.6 do botcity-action-bots
        uses: botcity-dev/botcity-action-bots@v1.0.6
        with:
          # Use a função de atualização
          update: true
          # ID do bot no Maestro
          botId: 'exemplo'
          # Tecnologia utilizada no bot
          technology: 'python'
          # Caminho da raiz do projeto onde ficará o .zip/.jar gerado
          botPath: './bot.zip'
        env:
          # As secrets devem ser configurados em seu repositório
          LOGIN: ${{ secrets.LOGIN }}
          SERVER: ${{ secrets.SERVER }}
          KEY: ${{ secrets.KEY }}
name: Atualizar a versão mais recente do Bot no Orquestrador Maestro.

on:
  push:
    branches:
      - main

jobs:
  update-latest:
    name: Atualização de versão do Bot.
    # Executando na versão mais recente do Ubuntu
    runs-on: ubuntu-latest
    steps:
      # Instalando o Java
      - uses: actions/setup-java@v3
      # Instalando o projeto
      - uses: actions/checkout@v4
      # Garante que o script build.sh possa ser executado
      - name: Obtenha permissão para utilizar o build.
        run: chmod +x build.sh
      # Executa o script de build para compilar o projeto
      - name: Executando o build.
        run: ./build.sh
      - name: Utilizando a action Botcity.
        # Usando a versão v1.0.6 do botcity-action-bots
        uses: botcity-dev/botcity-action-bots@v1.0.6
        with:
          # Use a função de atualização
          update: true
          # ID do bot no Maestro
          botId: 'exemplo'
          # Tecnologia utilizada no bot
          technology: 'java'
          # Caminho da raiz do projeto onde ficará o .zip/.jar gerado
          botPath: './dist/bot-jar-with-dependencies.jar'
        env:
          # As secrets devem ser configurados em seu repositório
          LOGIN: ${{ secrets.LOGIN }}
          SERVER: ${{ secrets.SERVER }}
          KEY: ${{ secrets.KEY }}
name: Atualizar a versão mais recente do Bot no Orquestrador Maestro.

on:
  push:
    branches:
      - main

jobs:
  update-latest:
    name: Atualização de versão do Bot.
    # Executando na versão mais recente do Ubuntu
    runs-on: ubuntu-latest
    steps:
      # Instalando o projeto
      - uses: actions/checkout@v4
      # Garante que o script build.sh possa ser executado
      - name: Obtenha permissão para utilizar o build.
        run: chmod +x build.sh
      # Executa o script de build para compilar o projeto
      - name: Executando o build.
        run: ./build.sh
      - name: Utilizando a action Botcity.
        # Usando a versão v1.0.6 do botcity-action-bots
        uses: botcity-dev/botcity-action-bots@v1.0.6
        with:
          # Use a função de atualização
          update: true
          # ID do bot no Maestro
          botId: 'exemplo'
          # Tecnologia utilizada no bot
          technology: 'javascript'
          # Caminho da raiz do projeto onde ficará o .zip/.jar gerado
          botPath: './bot.zip'
        env:
          # As secrets devem ser configurados em seu repositório
          LOGIN: ${{ secrets.LOGIN }}
          SERVER: ${{ secrets.SERVER }}
          KEY: ${{ secrets.KEY }}
name: Atualizar a versão mais recente do Bot no Orquestrador Maestro.

on:
  push:
    branches:
      - main

jobs:
  update-latest:
    name: Atualização de versão do Bot.
    # Executando na versão mais recente do Ubuntu
    runs-on: ubuntu-latest
    steps:
      # Instalando o projeto
      - uses: actions/checkout@v4
      # Garante que o script build.sh possa ser executado
      - name: Obtenha permissão para utilizar o build.
        run: chmod +x build.sh
      # Executa o script de build para compilar o projeto
      - name: Executando o build.
        run: ./build.sh
      - name: Utilizando a action Botcity.
        # Usando a versão v1.0.6 do botcity-action-bots
        uses: botcity-dev/botcity-action-bots@v1.0.6
        with:
          # Use a função de atualização
          update: true
          # ID do bot no Maestro
          botId: 'exemplo'
          # Tecnologia utilizada no bot
          technology: 'typescript'
          # Caminho da raiz do projeto onde ficará o .zip/.jar gerado
          botPath: './bot.zip'
        env:
          # As secrets devem ser configurados em seu repositório
          LOGIN: ${{ secrets.LOGIN }}
          SERVER: ${{ secrets.SERVER }}
          KEY: ${{ secrets.KEY }}

Resultado

Com o arquivo pronto, vamos acionar o workflow conforme o evento definido. Execute um push na main e veja o resultado semelhante a este: update

Criando um workflow avançado para executar deploy e release do seu Bot.

Utilizando o GitHub Actions, é possível criar workflows mais avançados para executar o deploy e a release do seu Bot no Orquestrador BotCity Maestro. Podemos configurar o seu acionamento a partir dos diversos eventos disponíveis no GitHub.

Como exemplo, vamos criar um workflow que será acionado a partir da publicação de uma release no GitHub.

Definiremos:

  • Evento: release
  • Tipo: [ published ]

Note

Para definir a versão do Deploy e a Release do Bot no Orquestrador BotCity Maestro, utilizaremos a tag da Release. Para entender como criar Releases no GitHub, acesse a documentação do GitHub.

Capturando evento de publicação da release

Crie um arquivo chamado deploy_and_release.yml dentro da pasta workflows.

No início deste arquivo, vamos colocar o nome do workflow e o evento que definimos, da seguinte forma:

name: Deploy e Release de versão do Bot no Orquestrador Botcity Maestro.

on:
  # Capturando o evento de publicação da release.
  release:
    types: [ published ]

Gerando o build do Bot

Assim como anteriormente precisamos como pré-requisito um arquivo chamado build.sh na raiz do projeto.

jobs:
  deploy-and-release:
    name: Deploy and release in BotCity.
    # Executando na versão mais recente do Ubuntu
    runs-on: ubuntu-latest
    steps:
      # Instalando o projeto
      - uses: actions/checkout@v4
      # Garante que o script build.sh possa ser executado
      - name: Obtenha permissão para utilizar o build.
        run: chmod +x build.sh
      # Executa o script de build para compilar o projeto
      - name: Executando o build.
        run: ./build.sh
jobs:
  deploy-and-release:
    name: Deploy and release in BotCity.
    # Executando na versão mais recente do Ubuntu
    runs-on: ubuntu-latest
    steps:
      # Instalando o Java
      - uses: actions/setup-java@v3
      # Instalando o projeto
      - uses: actions/checkout@v4
      # Garante que o script build.sh possa ser executado
      - name: Obtenha permissão para utilizar o build.
        run: chmod +x build.sh
      # Executa o script de build para compilar o projeto
      - name: Executando o build.
        run: ./build.sh
jobs:
  deploy-and-release:
    name: Deploy and release in BotCity.
    # Executando na versão mais recente do Ubuntu
    runs-on: ubuntu-latest
    steps:
      # Instalando o projeto
      - uses: actions/checkout@v4
      # Garante que o script build.sh possa ser executado
      - name: Obtenha permissão para utilizar o build.
        run: chmod +x build.sh
      # Executa o script de build para compilar o projeto
      - name: Executando o build.
        run: ./build.sh
jobs:
  deploy-and-release:
    name: Deploy and release in BotCity.
    # Executando na versão mais recente do Ubuntu
    runs-on: ubuntu-latest
    steps:
      # Instalando o projeto
      - uses: actions/checkout@v4
      # Garante que o script build.sh possa ser executado
      - name: Obtenha permissão para utilizar o build.
        run: chmod +x build.sh
      # Executa o script de build para compilar o projeto
      - name: Executando o build.
        run: ./build.sh

Utilizando a action

Nessa etapa, além de usar as credenciais configuradas no repositório como anteriormente, também vamos utilizar variáveis de eventos do GitHub.

A variável github.event.release.tag_name retorna o nome da tag utilizada ao publicar uma release no GitHub.

      - name: BotCity action
        # Usando a versão v1.0.6 do botcity-action-bots
        uses: botcity-dev/botcity-action-bots@v1.0.6
        with:
          # Use as funções de deploy e release
          deploy: true
          release: true
          # Use tag_name do evento release do GitHub
          version: ${{ github.event.release.tag_name }}
          botId: 'example'
          technology: 'python'
          botPath: './bot.zip'
        env:
          LOGIN: ${{ secrets.LOGIN }}
          SERVER: ${{ secrets.SERVER }}
          KEY: ${{ secrets.KEY }}
      - name: Botcity action
        # Usando a versão v1.0.6 do botcity-action-bots
        uses: botcity-dev/botcity-action-bots@v1.0.6
        with:
          # Use as funções de deploy e release
          deploy: true
          release: true
          # Use tag_name do evento release do GitHub
          version: ${{ github.event.release.tag_name }}
          botId: 'example'
          technology: 'java'
          botPath: './dist/bot-jar-with-dependencies.jar'
        env:
          LOGIN: ${{ secrets.LOGIN }}
          SERVER: ${{ secrets.SERVER }}
          KEY: ${{ secrets.KEY }}
      - name: Botcity action
        # Usando a versão v1.0.6 do botcity-action-bots
        uses: botcity-dev/botcity-action-bots@v1.0.6
        with:
          # Use as funções de deploy e release
          deploy: true
          release: true
          # Use tag_name do evento release do GitHub
          version: ${{ github.event.release.tag_name }}
          botId: 'example'
          technology: 'javascript'
          botPath: './bot.zip'
        env:
          LOGIN: ${{ secrets.LOGIN }}
          SERVER: ${{ secrets.SERVER }}
          KEY: ${{ secrets.KEY }}
      - name: Botcity action
        # Usando a versão v1.0.6 do botcity-action-bots
        uses: botcity-dev/botcity-action-bots@v1.0.6
        with:
          # Use as funções de deploy e release
          deploy: true
          release: true
          # Use tag_name do evento release do GitHub
          version: ${{ github.event.release.tag_name }}
          botId: 'example'
          technology: 'typescript'
          botPath: './bot.zip'
        env:
          LOGIN: ${{ secrets.LOGIN }}
          SERVER: ${{ secrets.SERVER }}
          KEY: ${{ secrets.KEY }}

Atenção

Dentro de with indicamos os parâmetros a serem utilizados, lembre-se de substituir os valores:

  • botId: ID do seu Bot no Orquestrador BotCity Maestro.
  • technology: tecnologia utilizada no Bot.
  • botPath: caminho do arquivo gerado pelo build.
  • version: a versão do Bot.
  • repositoryLabel: nome do repositório do Bot.

Os parâmetros são obrigatórios nas seguintes ações:

  • deploy: botId, technology, botPath, version, repositoryLabel
  • uptade: botId, technology, botPath
  • release: botId, technology, botPath, version

Arquivo completo

name: Deploy e Release de versão do Bot no Orquestrador Botcity Maestro.

on:
  # Capturando o evento de publicação da release
  release:
    types: [ published ]

jobs:
  deploy-and-release:
    name: Deploy and release in BotCity.
    # Executando na versão mais recente do Ubuntu
    runs-on: ubuntu-latest
    steps:
      # Instalando o projeto
      - uses: actions/checkout@v4
      # Garante que o script build.sh possa ser executado
      - name: Obtenha permissão para utilizar o build.
        run: chmod +x build.sh
      # Executa o script de build para compilar o projeto
      - name: Executando o build.
        run: ./build.sh
      - name: BotCity action
        # Usando a versão v1.0.6 do botcity-action-bots
        uses: botcity-dev/botcity-action-bots@v1.0.6
        with:
          # Use as funções de deploy e release
          deploy: true
          release: true
          # Use tag_name do evento release do GitHub
          version: ${{ github.event.release.tag_name }}
          botId: 'example'
          technology: 'python'
          botPath: './bot.zip'
        env:
          LOGIN: ${{ secrets.LOGIN }}
          SERVER: ${{ secrets.SERVER }}
          KEY: ${{ secrets.KEY }}
name: Deploy e Release de versão do Bot no Orquestrador Botcity Maestro.

on:
  # Capturando o evento de publicação da release
  release:
    types: [ published ]

jobs:
  deploy-and-release:
    name: Deploy and release in BotCity.
    # Executando na versão mais recente do Ubuntu
    runs-on: ubuntu-latest
    steps:
      # Instalando o Java.
      - uses: actions/setup-java@v3
      # Instalando o projeto.
      - uses: actions/checkout@v4
      # Garante que o script build.sh possa ser executado
      - name: Obtenha permissão para utilizar o build.
        run: chmod +x build.sh
      # Executa o script de build para compilar o projeto
      - name: Executando o build.
        run: ./build.sh
      - name: Botcity action
        # Usando a versão v1.0.6 do botcity-action-bots
        uses: botcity-dev/botcity-action-bots@v1.0.6
        with:
          # Use as funções de deploy e release
          deploy: true
          release: true
          # Use tag_name do evento release do GitHub
          version: ${{ github.event.release.tag_name }}
          botId: 'example'
          technology: 'java'
          botPath: './dist/bot-jar-with-dependencies.jar'
        env:
          LOGIN: ${{ secrets.LOGIN }}
          SERVER: ${{ secrets.SERVER }}
          KEY: ${{ secrets.KEY }}
name: Deploy e Release de versão do Bot no Orquestrador Botcity Maestro.

on:
  # Capturando o evento de publicação da release
  release:
    types: [ published ]

jobs:
  deploy-and-release:
    name: Deploy and release in BotCity.
    # Executando na versão mais recente do Ubuntu
    runs-on: ubuntu-latest
    steps:
      # Instalando o projeto
      - uses: actions/checkout@v4
      # Garante que o script build.sh possa ser executado
      - name: Obtenha permissão para utilizar o build.
        run: chmod +x build.sh
      # Executa o script de build para compilar o projeto
      - name: Executando o build.
        run: ./build.sh
      - name: Botcity action
        # Usando a versão v1.0.6 do botcity-action-bots
        uses: botcity-dev/botcity-action-bots@v1.0.6
        with:
          # Use as funções de deploy e release
          deploy: true
          release: true
          # Use tag_name do evento release do GitHub
          version: ${{ github.event.release.tag_name }}
          botId: 'example'
          technology: 'javascript'
          botPath: './bot.zip'
        env:
          LOGIN: ${{ secrets.LOGIN }}
          SERVER: ${{ secrets.SERVER }}
          KEY: ${{ secrets.KEY }}
name: Deploy e Release de versão do Bot no Orquestrador Botcity Maestro.

on:
  # Capturando o evento de publicação da release
  release:
    types: [ published ]

jobs:
  deploy-and-release:
    name: Deploy and release in BotCity.
    # Executando na versão mais recente do Ubuntu
    runs-on: ubuntu-latest
    steps:
      # Instalando o projeto
      - uses: actions/checkout@v4
      # Garante que o script build.sh possa ser executado
      - name: Obtenha permissão para utilizar o build.
        run: chmod +x build.sh
      # Executa o script de build para compilar o projeto
      - name: Executando o build.
        run: ./build.sh
      - name: Botcity action
        # Usando a versão v1.0.6 do botcity-action-bots
        uses: botcity-dev/botcity-action-bots@v1.0.6
        with:
          # Use as funções de deploy e release
          deploy: true
          release: true
          # Use tag_name do evento release do GitHub
          version: ${{ github.event.release.tag_name }}
          botId: 'example'
          technology: 'typescript'
          botPath: './bot.zip'
        env:
          LOGIN: ${{ secrets.LOGIN }}
          SERVER: ${{ secrets.SERVER }}
          KEY: ${{ secrets.KEY }}

Resultado

Execute a release e o resultado será este: update

Utilitários de Pipeline CI/CD BotCity

Esse Guia Prático tem foco no uso do GitHub Actions, porém existe a possibilidade de utilizar outras técnologias através dos Utilitários de Pipeline CI/CD BotCity. Confira no repositório os exemplos de integração com GitHub Actions, Azure Pipelines, Woodpecker CI, BitBucket Pipelines, GitLab CI e Jenkins.