Ir para o conteúdo

🧪 Implantação Contínua

Entregar valor de alta qualidade com velocidade

Implantação contínua (CD) é a prática de usar automação para publicar e implantar atualizações de software.

Para cumprir plenamente nosso objetivo no desenvolvimento completo do recurso, aplicamos em conjunto a prática de implantação contínua para validar e entregar valor aos nossos clientes com alta velocidade.

Mostrar marco de implantação contínua


Exercício: Automatizar Implantação de Lançamentos

O exercício anterior nos guiou através da automação da publicação de lançamentos. Vamos continuar a construir sobre esse marco para automatizar a implantação dos lançamentos publicados.


Implementar Fluxo de Trabalho de Implantação

No explorador de arquivos, crie um novo fluxo de trabalho .github/workflows/continuous.deployment.yml da seguinte forma:

.github/workflows/continuous.deployment.yml
name: Deploy Release

on:
  release:
    types:
      - released

concurrency:
  group: github-pages
  cancel-in-progress: false

permissions:
  contents: write
  deployments: write
  pages: write
  id-token: write

env:
  CI: true
  SITE_DIR: site

jobs:
  deploy:
    runs-on: ubuntu-latest
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}

    steps:
      - uses: actions/create-github-app-token@v1
        id: generate-app-token
        with:
          app-id: ${{ vars.APP_ID_ACTIONS_ASSISTANT }}
          private-key: ${{ secrets.APP_PRIVATE_KEY_ACTIONS_ASSISTANT }}

      - name: Setup Pages
        uses: actions/configure-pages@v5
        with:
          enablement: "true"
          token: "${{ steps.generate-app-token.outputs.token }}"

      - name: Download release asset
        id: download-release-asset
        run: |
          cat << 'EOF' > event.json
          ${{ toJson(github.event) }}
          EOF
          asset_id=$(cat event.json | jq '.release.assets[] | select(.name == "${{ env.SITE_DIR }}.zip") | .id')

          curl --location --output '${{ env.SITE_DIR }}.zip'                          \
            -H "Accept: application/octet-stream"                                     \
            -H "Authorization: Bearer ${{ steps.generate-app-token.outputs.token }}"  \
            -H "X-GitHub-Api-Version: 2022-11-28"                                     \
            "https://api.github.com/repos/${{ github.repository }}/releases/assets/${asset_id}"

          unzip -o "${{ env.SITE_DIR }}.zip" -d .

          echo '##### Debug'
          ls -al "${{ env.SITE_DIR }}"

      - name: Fix site file permissions
        run: |
          chmod -c -R +rX "${{ env.SITE_DIR }}/" | while read line; do
            echo "::warning title=Invalid file permissions automatically fixed::$line"
          done

      - name: Upload Pages artifact
        uses: actions/upload-pages-artifact@v3
        with:
          path: "${{ env.SITE_DIR }}"
          retention-days: "2"

      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4
        with:
          token: ${{ steps.generate-app-token.outputs.token }}

Análise

  • Linhas 3 - 6

    As implantações serão acionadas no evento de uma publicação de lançamento.

  • Linhas 8 - 10

    Garante que apenas um único trabalho ou fluxo de trabalho usando o mesmo grupo de concorrência será executado por vez.

    Quando um trabalho ou fluxo de trabalho concorrente é enfileirado, se outro trabalho ou fluxo de trabalho que usa o mesmo grupo de concorrência no repositório estiver em andamento, o trabalho ou fluxo de trabalho enfileirado ficará pendente. Qualquer trabalho ou fluxo de trabalho anteriormente pendente no grupo de concorrência será cancelado. Se você não deseja cancelar também nenhum trabalho ou fluxo de trabalho em execução no mesmo grupo de concorrência, especifique cancel-in-progress: false.

  • Linhas 25 - 27

    Isso fará com que a URL do site implantado seja exibida onde o fluxo de trabalho é executado.

  • Linhas 36 - 40

    Esta etapa habilita o GitHub Pages e extrai vários metadados sobre um site. Ela também pode ser usada para configurar vários geradores de sites estáticos que suportamos como fluxos de trabalho iniciais.

  • Linhas 42 - 65

    Baixa os ativos associados à publicação de lançamento que acionou este fluxo de trabalho e, quando necessário, ajusta as permissões para os arquivos nos ativos.

  • Linhas 67 - 71

    Carrega os artefatos do site para o local de armazenamento onde devem ser finalmente coletados pela próxima etapa para implantação.

  • Linhas 73 - 77

    Esta etapa implanta o site.


Fazer commit e publicar suas alterações

Você pode vincular suas alterações a uma issue

Lembre-se da issue que você criou anteriormente e seu respectivo número, você o usará para vincular suas alterações atuais à issue.

1
2
3
git add .
git commit -m "$(printf 'Criar um jogo de tetris para impulsionar o engajamento do site\n\n-Implementar implantação contínua\n\n- Resolve #<NÚMERO-DA-ISSUE>')"
git push origin feature/tetris-game

Mesclar seu pull request aberto

  • Na página do pull request, abra o menu suspenso do botão Mesclar pull request para escolher a opção Rebase e mesclar.

  • Em seguida, pressione o botão Rebase e mesclar para mesclar seu pull request.

    Mostrar visualização de mesclagem do pull request

  • Finalmente, pressione Confirmar rebase e mesclagem.

Quando você mescla o pull request aberto, deve fazer as seguintes observações.

Colaboração

  • A issue vinculada em seu quadro de projeto é automaticamente fechada e movida para a coluna ✅ Concluído do quadro.

    Mostrar item de trabalho concluído

Automação

Quando você vai para a aba Actions em seu repositório, e observa...

  • O fluxo de trabalho Version Changes to the Main Branch é executado.
  • O fluxo de trabalho Package Delivery Artifacts & Create Release é executado.

    Consequentemente, o lançamento é anunciado em Discussões. Mostrar discussão de lançamento

  • O fluxo de trabalho Deploy Release é executado.

    E na conclusão bem-sucedida do fluxo de trabalho, a URL pública do seu site é exibida no trabalho.

    Mostrar execução bem-sucedida de implantação de lançamento

Capacitação de Partes Interessadas

As partes interessadas podem facilmente explorar implantações do projeto.

  • Resumo de implantações na página inicial do repositório.

    Mostrar implantação na página inicial do repositório

  • Lista detalhada de ambientes de implantação.

    Mostrar lista de implantações


📚 Recursos