Deploy automático com GitHub workflow usando git remote

Olá comunidade,

Venho compartilhar com vocês uma solução de integração continua para o GitHub para quem já aderiu a nova nomenclatura dos ramos. Atualmente a Umbler não dá suporte da integração de deploy do GitHub para outros ramos que não seja o master, enquanto eles não concertam isso, podemos usar o poder o GitHub actions para tal.

Antes de começarmos vamos listar o único pré-requisito da solução:

  1. Para acessar o servidor Umbler via ssh é necessário ter uma aplicação rodando sem problemas na Umbler. Caso ainda não tenha publicado nada ou a aplicação está com problemas, sugiro seguir esse tutorial para levantar uma aplicação temporária e conseguir fazer ssh para o servidor.

O processo tem dificuldade intermediária e requer alguns passos prévios para liberar o acesso via ssh, então vamos lá.

  1. Criar chave ssh localmente: Felizmente a Umbler tem um tutorial que atende as nossas necessidades, basta seguir essas instruções. Uma vez com a chave criada teremos 2 arquivos, a chave privada id_rsa e a chave pública id_rsa.pub na pasta indicada.

  2. Adicionar chave pública no gerenciador de chaves ssh no site da Umbler no endereço https://app.umbler.com/core/sshkeys. Basta copiar o conteúdo do arquivo id_rsa.pub e colar lá. Também escolha um nome para identificar a chave. Teste se tudo deu certo até então habilitando o ssh e faça um ssh para o servidor umbler. Ambas configurações são feitas e visualizadas em https://app.umbler.com/plataforma.nortanprojetos.com/website/ssh.

  3. Remover o arquivo known_hosts na mesmas pasta que estão as chaves, caso o arquivo exista. Fazer um push para o remote da Umbler localmente e aceitar a adição do endereço no known_hosts. (Note que esse passo requer que já tenha o remote da Umbler via ssh configurado localmente no seu repositório, para isso basta entrar pelo site da umbler na página de configuração do seu site, ir em Git via ssh)

  4. Adicionar os segredos no repositório do GitHub no qual deseja fazer a integração continua:

  • SSH_KEY: Copiar a colar o conteúdo do arquivo da chave privada id_rsa.
  • KNOWN_HOSTS: Copiar a colar o conteúdo do arquivo da chave privada known_hosts
  • UMBLER_REMOTE: O endereço git via ssh exibido na página de deploy usando git remote
  1. Por fim basta adicionar o código abaixo no repositório seguindo o caminho .github/workflows/umbler-deploy.yml, trocando o oBranchDesejadoAqui pelo nome do branch desejado:
name: Deploy para a Umbler

on:
  push:
    branches: [oBranchDesejadoAqui]

  workflow_dispatch:

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Instala chave SSH
        uses: shimataro/ssh-key-action@v2
        with:
          key: ${{ secrets.SSH_KEY }}
          known_hosts: ${{ secrets.KNOWN_HOSTS }}
      - name: Checkout do branch
        uses: actions/checkout@v2
        with:
          ref: oBranchDesejadoAqui
      - name: Commit para Umbler usando git remote
        run: |
          git remote add umbler ${{ secrets.UMBLER_REMOTE }}
          git push umbler oBranchDesejadoAqui:master -f

Uma sugestão também é criar um github action para fazer o deploy direto para a Umbler. Eu comecei a fazer algo nessa linha por aqui, mas acabei optando pelo workflow. Fica a sugestão para a equipe de desenvolvimento :slight_smile:

3 Curtidas

Opa, olá, @kikuto, tudo bem, meu querido?

Primeiramente, seja muito bem-vindo a nossa Comunidade :heart:

Em segundo lugar, excelente o seu passo-a-passo, tenho certeza que vai ajudar outras pessoas e vai enriquecer cada vez mais a nossa Comunidade, muito bom mesmo :clap:

Quanto a sua sugestão pode deixar que deixaremos como sugestão para a nossa equipe de desenvolvimento ver a possibilidade de implantar esse método de integração continua com o Github, é uma sugestão que inclusive já tivemos em outros momentos e levamos em consideração sempre os feedbacks para implantá-la ou não :wink:

Vi que você tem estado bastante ativo com vários posts, isso é realmente importante, novamente parábens :smile:

Obrigado por compartilhar suas soluções!

1 Curtida

Fala @kikuto! tentei realizar o push, mas me deparo com o seguinte erro:

e já configurei todas as dependências!!

Fala @Francisco_Viana! Bem vindo a comunidade Umbler!
Que bom que você se interessou nessa solução de integração continua.

Primeiramente, se o repositório for público, manda o link aqui, aí fica mais fácil de inspecionar.

Vamos lá, antes de falar sobre meu palpite do que é problema queria levantar alguns pontos:

  1. Não é mais recomendado usar o branch principal como master devido a se referir a uma nomenclatura racista, assim como outros termos como blacklist e whitelist. Leia mais aqui.
  2. Se o seu projeto só tem o master, não faz muito sentido você usar essa solução porque você pode usar direto a integração com git da umbler.

Pontos levantados, agora vamos as minhas suspeitas. Tudo indica que o problema está nas chaves de ssh. Se você fez o passo 1 e seguiu o tutorial da Umbler, você criou a chave sem senha na pasta indicada. Acredito que você também tenha seguido o passo 2. Para confirmar que o passo 1 e 2 foram concluídos com sucesso basta fazer um ssh da sua máquina para o servidor da Umbler(caso sua aplicação esteja rodando sem problemas).

O passo 3 e o passo 4 são os mais complicados e é onde pode dar o problema. O passo 3 é o passo chave do tutorial. E requer que você tenha feito a checagem que sugeri agora a pouco.

E o passo 4 consolida a solução salvando as variáveis privadas no github.

Vou atualizar aqui minha postagem. Por hora faz a checagem que sugeri do passo 2, se passou, repete o passo 3 e 4. E me diz o resultado.

@kikuto já havia configurado tudo certinho, mas realmente não rola o deploy!
Então resolvi fazer a integração do GitHub mesmo!

Bem estranho isso. Será que deixei passar algum ponto no tutorial? Para mim está funcionando perfeitamente. Até estamos migrando o servidor de produção para a Umbler essa seamana.

Mas que bom então que a solução de integração com o git resolve no seu caso :slight_smile:

Estava reajustando meu repositório para finalizar minha migração para a Umbler e passei pelo mesmo problema. E para resolve-lo simplesmente repeti o passo 3 e funcionou como esperado.

O passo 3 consiste em:

  1. Remover o ~/.ssh/known_hosts ou no local que ele foi criado
  2. Adicionar o remote da Umbler no seu repositório com git remote add umbler ENDEREÇO. Esse endereço fica na página de Git remote no painel da umbler da sua hospedagem. O ponto importante é que se deve usar a opção ssh.
  3. Fazer um push para o repositório git push umbler BRANCH_ATUAL:master e cancelar depois adicionar o host como confiável.
  4. Seguir para o Passo 4 copiando o conteúdo de ~/.ssh/known_hosts como o passo indica.