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 Orquestrador, 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:
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 Orquestrador.
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:
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.
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: 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 Orquestrador
          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 Orquestrador
          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 Orquestrador
          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 Orquestrador
          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.
- 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.
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 Orquestrador
          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.
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 Orquestrador
          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.
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 Orquestrador
          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.
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 Orquestrador
          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:

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. 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, 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.
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.
- 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.
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.
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.
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.
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:

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.