Ruby: Implementar com GitHub Actions

Como implementar o seu código Ruby utilizando GitHub Actions

👋 Bem-vindo à documentação do Stackhero!

A Stackhero oferece uma solução Ruby cloud pronta a usar que proporciona uma série de benefícios, incluindo:

  • Implemente a sua aplicação em segundos com um simples git push.
  • Utilize o seu próprio nome de domínio e beneficie da configuração automática de certificados HTTPS para uma segurança reforçada.
  • Desfrute de tranquilidade com backups automáticos, atualizações com um clique, e preços simples, transparentes e previsíveis.
  • Obtenha desempenho ótimo e segurança robusta graças a uma VM privada e dedicada.

Poupe tempo e simplifique a sua vida: só leva 5 minutos para experimentar a solução de Ruby cloud hosting da Stackhero!

O GitHub Actions facilita a automatização de tarefas como a implementação do seu código Ruby nos servidores de produção. Não são necessários passos manuais.

Neste guia, irá aprender como configurar o GitHub Actions de forma segura e fiável para implementar automaticamente o seu código Ruby nos ambientes de staging e produção. Esta abordagem garante que as implementações são consistentes e reduz o risco de erros.

Para começar, irá trabalhar com dois ramos no seu repositório GitHub: staging e production. Sempre que fizer push de código para estes ramos, as alterações serão automaticamente implementadas na instância Stackhero correspondente.

Ter uma instância de staging é opcional. Embora possa seguir este guia apenas com uma instância de produção, é altamente recomendado configurar ambos os ambientes de staging e produção. Isto é considerado uma boa prática no setor e ajuda a detetar problemas antes que cheguem aos utilizadores em produção.

Antes de começar, certifique-se de que tem uma conta GitHub e um repositório com o seu código Ruby.

Aceda ao seu dashboard Stackhero para criar dois serviços Ruby, um para staging e outro para produção. Para maior clareza, é aconselhável renomear estes serviços para "Production" e "Staging".

Ainda não tem uma conta Stackhero? Pode registar-se gratuitamente em apenas alguns minutos e, em seguida, criar os seus serviços cloud Ruby com apenas alguns cliques.

Exemplo de serviços de produção e stagingExemplo de serviços de produção e staging

Para permitir que o GitHub Actions implemente o seu código, terá de configurar chaves SSH. Isto garante que apenas ações autorizadas podem ligar-se aos seus serviços Stackhero, mantendo as implementações seguras.

Pode gerar um novo par de chaves SSH no seu computador utilizando:

ssh-keygen -C "" -f /tmp/ssh_key -N ""

De seguida, obtenha a chave pública que acabou de criar:

cat /tmp/ssh_key.pub

No dashboard Stackhero, selecione o seu serviço Ruby "production" e clique no botão "Configure". Obter definições do serviçoObter definições do serviço

Depois:

  1. Em SSH public keys, clique em Add a public key.
  2. Em Description, introduza GitHub Action.
  3. Em Key, cole o conteúdo da chave pública do seu computador.

Obter definições do serviçoObter definições do serviço

Agora, aceda ao site do GitHub e abra o seu projeto.

Vá a Settings > Environments e clique em New environment. Configurar ambientes no GitHubConfigurar ambientes no GitHub

Dê o nome "production" ao seu ambiente e guarde. Definir o ambienteDefinir o ambiente

Clique no botão No restriction e escolha Selected branches and tags. Definir restrições do ambienteDefinir restrições do ambiente

Clique em Add deployment branch or tag rule, introduza "production" como padrão e adicione a regra. Definir ramo do ambienteDefinir ramo do ambiente Definir ramo do ambienteDefinir ramo do ambiente

Para guardar a sua chave privada SSH de forma segura, vá a Environment secrets e clique em Add secret. Adicionar secretAdicionar secret

Obtenha a sua chave privada do seu computador:

cat /tmp/ssh_key

Em Name, introduza STACKHERO_SSH_PRIVATE_KEY. Em Value, cole o conteúdo da sua chave privada. Definir o secret da chave privada SSHDefinir o secret da chave privada SSH

De seguida, adicione o endpoint do seu serviço Ruby como variável de ambiente. Clique em Add variable em Environment variables. Definir variáveisDefinir variáveis

Em Name, introduza STACKHERO_ENDPOINT. Em Value, cole o endpoint do seu serviço Ruby, que pode encontrar no seu dashboard Stackhero. Definir a variável endpointDefinir a variável endpoint

Se definiu um domínio personalizado para o seu serviço, certifique-se de utilizar esse domínio personalizado em vez de <XXXXXX>.stackhero-network.com.

Depois de configurar as chaves no Stackhero e no GitHub, pode eliminá-las do seu computador por motivos de segurança.

rm /tmp/ssh_key /tmp/ssh_key.pub

Na sua máquina local, no seu repositório Git, crie uma pasta chamada .github/workflows. Dentro desta pasta, crie um ficheiro chamado deploy-to-stackhero.yml.

# Ficheiro: .github/workflows/deploy-to-stackhero.yml

name: Deploy to Stackhero
run-name: Deploy branch "${{ github.ref_name }}" to Stackhero

on:
  push:
    # Lista de ramos que irão acionar a ação de deploy após um git push.
    # Não se esqueça de criar um ambiente correspondente ao nome do ramo no GitHub (em "Settings"/"Environments").
    # Depois adicione o secret "STACKHERO_SSH_PRIVATE_KEY" e a variável "STACKHERO_ENDPOINT" nesse ambiente.
    branches: [ "production", "staging" ]

jobs:
  Deploy:
    environment: ${{ github.ref_name }}
    runs-on: ubuntu-latest
    steps:
    - uses: stackhero-io/github-actions-deploy-to-stackhero@v1
      with:
        # O secret "STACKHERO_SSH_PRIVATE_KEY" e a variável "STACKHERO_ENDPOINT" devem ser definidos no ambiente correspondente ao ramo no GitHub em "Settings"/"Environments".
        ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
        endpoint: ${{ vars.STACKHERO_ENDPOINT }}

Depois de criar o ficheiro do workflow, pode confirmar as suas alterações.

git add -A .
git commit -m "Add GitHub Actions to deploy to Stackhero"

De seguida, crie um ramo de produção.

git checkout -b production

Por fim, faça push das suas alterações para o GitHub.

git push --set-upstream origin production

Este último git push irá enviar o seu código para o ramo production no GitHub. O GitHub Actions irá iniciar automaticamente e implementar o seu código na sua instância Stackhero.

Para ver o seu workflow em ação, visite a página do seu projeto no GitHub e clique em Actions. GitHub Actions que implementou em produçãoGitHub Actions que implementou em produção

Parabéns, acabou de configurar a implementação contínua para produção com o GitHub Actions.

A configuração do ambiente de staging segue exatamente o mesmo processo do ambiente de produção. Basta repetir os passos acima, substituindo production por staging sempre que necessário.

Depois de configurar o seu ambiente de staging, pode criar um ramo de staging.

git checkout -b staging

Faça push do seu ramo de staging para o GitHub.

git push --set-upstream origin staging

O GitHub Actions irá agora implementar automaticamente o seu ramo de staging na instância Ruby Stackhero dedicada ao staging.

Para reforçar a segurança das suas implementações, é aconselhável proteger os ramos production e staging. Isto significa que os pushes diretos são restringidos e as alterações devem passar por um pull request. Os membros da equipa com as permissões adequadas podem rever e aprovar pull requests para staging e, quando tudo estiver validado, as alterações podem ser integradas em production da mesma forma.

Ao seguir este workflow, aumenta a segurança (apenas utilizadores autorizados podem implementar em staging e production) e a fiabilidade (todas as novas funcionalidades são testadas em staging antes de chegarem a produção). Isto ajuda a garantir implementações suaves e um ambiente de produção estável.