Como conectar GitLab e Pantheon e otimizar os fluxos de trabalho do Drupal e WordPress

Como conectar GitLab e Pantheon e otimizar os fluxos de trabalho do Drupal e WordPress
Nosso convidado, criador de ferramentas para desenvolvedores da Pantheon, fala sobre como automatizar implantações do WordPress com o GitLab CI/CD.

Em Pantheon Eu trabalho com relações com desenvolvedores, então estou sempre em busca de novas maneiras de ajudar os desenvolvedores de WordPress e Drupal a resolver problemas de automação nos fluxos de trabalho. Para isso, adoro experimentar novas ferramentas e combiná-las para uma eficiência maior.

Vejo frequentemente desenvolvedores lutando com um servidor intermediário.

Não é uma experiência agradável esperar a sua vez de usar o servidor intermediário ou enviar aos clientes uma URL com a anotação: 'Aqui é onde você deve olhar, e aqui não deve olhar ainda'.

Ambientes multidev — uma das ótimas ferramentas da Pantheon — resolve esse problema, pois é possível criar ambientes sob ramos do Git sob demanda. Cada ambiente multidev tem sua própria URL e banco de dados, permitindo que os desenvolvedores trabalhem tranquilamente, verifiquem a qualidade e obtenham aprovação, sem pisarem nos pés uns dos outros.

Mas na Pantheon não há ferramentas para controle de versões ou integração e implantação contínuas (CI/CD). Em vez disso, é uma plataforma flexível que permite integrar qualquer ferramenta.

Ainda percebi que, para desenvolvimento, as equipes usam um conjunto de ferramentas, e para compilar e implantar, utilizam outras.

Por exemplo, eles têm ferramentas diferentes para controle de versões e CI/CD. É necessário se aventurar e alternar entre ferramentas para editar código e diagnosticar problemas.

Sobre GitLab Há um conjunto completo de ferramentas de desenvolvimento: para controle de versões, tickets, solicitações de mesclagem, um pipeline CI/CD de primeira linha, repositório de contêineres e tudo mais. Até agora, não encontrei aplicativos que ofereçam tanto para gerenciar o fluxo de trabalho de desenvolvimento.

Eu amo automação, então estudei como conectar a Pantheon ao GitLab, para que os commits na branch principal do GitLab fossem implantados no ambiente de desenvolvimento principal da Pantheon. Além disso, solicitações de mesclagem no GitLab podem criar e implantar código em ambientes multidev na Pantheon.

Neste guia, vou mostrar como configurar a conexão entre o GitLab e a Pantheon e otimizar o fluxo de trabalho do WordPress e Drupal.

Claro que podemos espelhar o repositório do GitLab, mas faremos tudo manualmente para explorar o GitLab CI e no futuro utilizar essa ferramenta não apenas para implantações.

Introdução

Para entender este post, é necessário saber que Pantheon divide cada site em três elementos: código, banco de dados e arquivos.

O código inclui arquivos CMS, como o núcleo, plugins e temas do WordPress. Esses arquivos são gerenciados em um repositório Git, hospedado no Pantheon, ou seja, podemos fazer o deploy do código do GitLab para o Pantheon usando o Git.
Arquivos no Pantheon referem-se a arquivos de mídia, como imagens para o site. Geralmente, eles são enviados pelos usuários, e o Git os ignora.

Crie uma conta gratuita, descubra mais sobre o fluxo de trabalho do Pantheon ou agende uma demonstração em pantheon.io.

Suposições

Meu projeto no Pantheon e GitLab se chama pantheon-gitlab-blog-demo. O nome do projeto deve ser único. Aqui trabalharemos com um site WordPress. Podemos usar o Drupal também, mas serão necessárias algumas modificações.

Vou usar a linha de comando do Git, mas você pode trabalhar na interface gráfica, se preferir.

Criamos o projeto

Primeiro, vamos criar um projeto GitLab (ainda falaremos sobre isso).

Agora, vamos criar um site WordPress no Pantheon. Depois, instalaremos o WordPress para o painel do site.

Se você está ansioso para fazer alterações, como remover e adicionar plugins, aguarde um pouco. O site ainda não está conectado ao GitLab, e queremos que todas as alterações de código passem pelo GitLab.

Depois de instalar o WordPress, voltamos ao painel do site Pantheon e mudamos o modo de desenvolvimento para Git.

Como conectar GitLab e Pantheon e otimizar os fluxos de trabalho do Drupal e WordPress

O commit inicial no GitLab

Agora precisamos transferir o código inicial do WordPress do Pantheon para o GitLab. Para isso, clonamos o código do repositório Git do site Pantheon localmente e depois o enviamos ao repositório GitLab.

Para facilitar e aumentar a segurança, vamos adicionar uma chave SSH no Pantheon e não teremos que digitar a senha toda vez que clonarmos o repositório Git do Pantheon. Aproveitamos e adicionamos a chave SSH no GitLab..

Para isso, clonamos o site Pantheon localmente, copiando o comando do campo Clone with Git do painel do site.

Como conectar GitLab e Pantheon e otimizar os fluxos de trabalho do Drupal e WordPress
Se precisar de ajuda, consulte a documentação sobre como começar a trabalhar com o Git para o Pantheon..

Agora vamos modificar git remote origin, para apontar para o GitLab em vez do Pantheon. Isso pode ser feito com o comando git remote..

Vamos para o projeto GitLab e copiamos a URL do repositório no menu suspenso Clone na página de detalhes do projeto. Selecionamos a opção Clone with SSH, pois já configuramos a chave SSH.

Como conectar GitLab e Pantheon e otimizar os fluxos de trabalho do Drupal e WordPress

Por padrão git remote para a cópia local do repositório do código — origin. Isso pode ser alterado com git remote set-url origin [URL do repositório GitLab], onde, em vez de colchetes, inserimos a URL real.

Por fim, executamos git push origin master --force, para enviar o código do WordPress do site Pantheon para o GitLab.

O parâmetro –force deve ser usado somente uma vez. Depois, nas comandos git push não estará no GitLab.

Configurando as credenciais e variáveis

Lembra como adicionamos a chave SSH localmente para nos autorizar no Pantheon e no GitLab? O token SSH pode ser usado para autorização no GitLab e no Pantheon.

O GitLab possui uma ótima documentação. Vamos dar uma olhada na seção sobre chaves SSH ao usar o executor Docker no documento sobre o uso de chaves SSH com GitLab CI/CD.

Agora vamos completar os primeiros dois passos: vamos criar um novo par de chaves SSH localmente com ssh-keygen e adicionar a chave privada como variável no projeto.

Depois, definiremos SSH_PRIVATE_KEY como como variável de ambiente GitLab CI/CD nas configurações do projeto.
No terceiro e quarto passos, criaremos o arquivo .gitlab-ci.yml com o seguinte conteúdo:

before_script:
  # Veja https://docs.gitlab.com/ee/ci/ssh_keys/README.html
  - eval $(ssh-agent -s)
  - echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add > /dev/null
  - mkdir -p $HOME/.ssh && echo "StrictHostKeyChecking no" >> "$HOME/.ssh/config"
  - git config --global user.email "$GITLAB_USER_EMAIL"
  - git config --global user.name "Gitlab CI"

Por enquanto, não vamos cometer o arquivo .gitlab-ci.yml, pois será necessário adicionar mais algumas coisas depois.

Agora, vamos executar o quinto passo e adicionar a chave pública, que criamos no primeiro passo, aos serviços que você precisa de acesso no ambiente de construção.

Neste caso, queremos acessar o Pantheon a partir do GitLab. Vamos seguir as instruções no documento Pantheon sobre adicionando a chave SSH ao Pantheon e vamos realizar este passo.

Lembre-se: a chave SSH privada fica no GitLab, a pública vai para o Pantheon.

Vamos configurar mais algumas variáveis de ambiente. A primeira é chamada PANTHEON_SITE. O valor dela é o nome do site Pantheon na sua máquina.

O nome na máquina aparece no final do comando Clone with Git. Você já clonou o site localmente, então isso será o nome do diretório do repositório local.

Como conectar GitLab e Pantheon e otimizar os fluxos de trabalho do Drupal e WordPress

Depois, vamos configurar a variável de ambiente PANTHEON_GIT_URL. Este é o URL do repositório Git para o site Pantheon que já usamos.

Vamos inserir apenas a URL do repositório SSH, sem git clone e sem o nome do site na máquina no final.

Ufa. Isso foi feito, agora podemos concluir nosso arquivo .gitlab-ci.yml.

Vamos criar a tarefa de deployment

O que iremos fazer inicialmente com o GitLab CI é muito parecido com o que fizemos antes com repositórios Git. Mas desta vez, adicionaremos o repositório Pantheon como uma segunda origem remota do Git e, em seguida, enviaremos o código do GitLab para o Pantheon.

Para isso, vamos configurar uma etapa deploy e a tarefa deploy:dev, pois estaremos fazendo o deployment no ambiente de desenvolvimento no Pantheon. Como resultado, o arquivo .gitlab-ci.yml ficará assim:

estágios:
- implantar

antes_script:
  # Veja https://docs.gitlab.com/ee/ci/ssh_keys/README.html
  - eval $(ssh-agent -s)
  - echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add > /dev/null
  - mkdir -p $HOME/.ssh && echo "StrictHostKeyChecking no" >> "$HOME/.ssh/config"
  - git config --global user.email "$GITLAB_USER_EMAIL"
  - git config --global user.name "Gitlab CI"

implantar:dev:
  estágio: implantar
  ambiente:
    nome: dev
    url: https://dev-$PANTHEON_SITE.pantheonsite.io/
  script:
    - git remote add pantheon $PANTHEON_GIT_URL
    - git push pantheon master --force
  apenas:
    - master

Variáveis SSH_PRIVATE_KEY, PANTHEON_SITE e PANTHEON_GIT_URL devem parecer familiares — configuramos essas variáveis de ambiente antes. Com essas variáveis, poderemos usar os valores no arquivo .gitlab-ci.yml várias vezes, e a atualização delas precisará ser feita apenas em um só lugar.

Finalmente, vamos adicionar, comitar e enviar o arquivo .gitlab-ci.yml para o GitLab.

Verificando a implantação

Se fizemos tudo certo, a tarefa deploy:dev será concluída com sucesso no GitLab CI/CD e enviará o commit .gitlab-ci.yml para o Pantheon. Vamos dar uma olhada.

Como conectar GitLab e Pantheon e otimizar os fluxos de trabalho do Drupal e WordPress

Como conectar GitLab e Pantheon e otimizar os fluxos de trabalho do Drupal e WordPress

Como conectar GitLab e Pantheon e otimizar os fluxos de trabalho do Drupal e WordPress

Enviando branches de merge requests para o Pantheon

Aqui vamos usar minha função favorita do Pantheon — multidev, onde é possível criar ambientes adicionais do Pantheon para branches Git sob demanda.

O acesso ao multidev é restrito, então esta seção pode ser ignorada. Mas se você tiver acesso, pode aumentar significativamente a eficiência configurando a criação automática de ambientes multidev no Pantheon a partir de merge requests do GitLab.

Primeiro, vamos criar uma nova branch Git localmente usando git checkout -b multidev-support. Agora, vamos fazer algumas alterações novamente em .gitlab-ci.yml.

Eu gosto de incluir o número do merge request no nome do ambiente Pantheon. Por exemplo, o primeiro merge request — mr-1, o segundo — mr-2 e assim por diante.

O número do merge request muda, então precisamos determinar dinamicamente os nomes das branches do Pantheon. No GitLab, isso é simples — precisamos usar variáveis de ambiente pré-definidas.

Podemos usar $CI_MERGE_REQUEST_IID, para indicar o número de merge request. Vamos aplicar tudo isso junto com as variáveis de ambiente globais que definimos anteriormente e adicionar uma nova tarefa deploy:multidev no final do arquivo .gitlab-ci.yml.

implantar:multidev:
  estágio: implantar
  ambiente:
    nome: multidev/mr-$CI_MERGE_REQUEST_IID
    url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/
  script:
    # Checkout da branch de origem do merge request
    - git checkout $CI_COMMIT_REF_NAME
    # Adiciona o repositório git do Pantheon como um remote adicional
    - git remote add pantheon $PANTHEON_GIT_URL
    # Push da branch de origem do merge request para o Pantheon
    - git push pantheon $CI_COMMIT_REF_NAME:mr-$CI_MERGE_REQUEST_IID --force
  apenas:
    - merge_requests

Vai se parecer com nossa tarefa deploy:dev, apenas a branch será enviada ao Pantheon, em vez de master.

Adicionamos e comitamos o arquivo atualizado .gitlab-ci.yml, agora vamos enviar a nova branch para o GitLab com git push -u origin multidev-support.

Agora, vamos criar uma nova solicitação de merge a partir do branch multidev-support, clicando em Criar solicitação de merge.

Como conectar GitLab e Pantheon e otimizar os fluxos de trabalho do Drupal e WordPress

Após criar a solicitação de merge, vamos verificar como a tarefa CI/CD está se desenvolvendo deploy:multidev.

Como conectar GitLab e Pantheon e otimizar os fluxos de trabalho do Drupal e WordPress

Veja — um novo branch foi enviado para o Pantheon. Mas se formos para a seção multidev no painel do site no Pantheon, não veremos o novo ambiente lá

Como conectar GitLab e Pantheon e otimizar os fluxos de trabalho do Drupal e WordPress

Vamos conferir a seção Git Branches.

Como conectar GitLab e Pantheon e otimizar os fluxos de trabalho do Drupal e WordPress

No final, nosso branch mr-1 chegou ao Pantheon. Vamos criar um ambiente a partir do branch mr-1.

Como conectar GitLab e Pantheon e otimizar os fluxos de trabalho do Drupal e WordPress

Criamos um ambiente multidev, agora vamos voltar para o GitLab e olhar a seção Operations > Environments. Vamos ver registros para dev e mr-1.

Isso é porque adicionamos um registro environment com o nome nome e url nas tarefas CI/CD. Se clicarmos no ícone do ambiente aberto, seremos levados ao URL do ambiente multidev no Pantheon.

Automatizando a criação do multidev

Basicamente, podemos parar por aqui e simplesmente não esquecer de criar um ambiente multidev para cada solicitação de merge, mas esse processo pode ser automatizado.

No Pantheon, há uma ferramenta de linha de comando Terminus, onde podemos interagir com a plataforma de forma automática. No Terminus, é possível criar ambientes multidev a partir da linha de comando — perfeito para GitLab CI.

Precisamos de uma nova solicitação de merge para testar isso. Vamos criar um novo branch usando git checkout -b auto-multidev-creation.

Para usar o Terminus nas tarefas do GitLab CI/CD, é necessário um token de máquina para autenticação no Terminus e uma imagem de contêiner com o Terminus.

Criando um token de máquina Pantheon, salvando-o em um lugar seguro e adicionando como uma variável de ambiente global no GitLab com o nome PANTHEON_MACHINE_TOKEN.

Se você esqueceu como adicionar variáveis de ambiente no GitLab, volte para onde definimos PANTHEON_SITE.

Criando um Dockerfile com o Terminus

Se você não estiver usando Docker ou não gostar de arquivos Dockerfile, pegue minha imagem registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest e pule esta parte.

No GitLab, há um registro de contêineres, onde você pode compilar e armazenar o Dockerfile para o nosso projeto. Vamos criar um arquivo Dockerfile com o Terminus para trabalhar com o Pantheon.

O Terminus é uma ferramenta de linha de comando em PHP, então vamos começar com uma imagem PHP. Estou instalando o Terminus via Composer, então vou usar a imagem oficial do Docker do Composer. Criamos Dockerfile no diretório do repositório local com o seguinte conteúdo:

# Use the official Composer image as a parent image
FROM composer:1.8

# Update/upgrade apk
RUN apk update
RUN apk upgrade

# Make the Terminus directory
RUN mkdir -p /usr/local/share/terminus

# Install Terminus 2.x with Composer
RUN /usr/bin/env COMPOSER_BIN_DIR=/usr/local/bin composer -n --working-dir=/usr/local/share/terminus require pantheon-systems/terminus:"^2"

Siga as instruções para compilar e enviar imagens na seção Build and push images em da documentação do registro de contêineres, para compilar a imagem de Dockerfile e enviá-la ao GitLab.

Abrimos a seção Registry no projeto GitLab. Se tudo correr conforme o planejado, lá estará nossa imagem. Anote o link para o tag da imagem — isso será necessário para o arquivo .gitlab-ci.yml.

Como conectar GitLab e Pantheon e otimizar os fluxos de trabalho do Drupal e WordPress

Seção script na tarefa deploy:multidev começa a crescer, então vamos movê-lo para um arquivo separado. Criamos um novo arquivo private/multidev-deploy.sh:

#!/bin/bash

# Store the mr- environment name
export PANTHEON_ENV=mr-$CI_MERGE_REQUEST_IID

# Authenticate with Terminus
terminus auth:login --machine-token=$PANTHEON_MACHINE_TOKEN

# Checkout the merge request source branch
git checkout $CI_COMMIT_REF_NAME

# Add the Pantheon Git repository as an additional remote
git remote add pantheon $PANTHEON_GIT_URL

# Push the merge request source branch to Pantheon
git push pantheon $CI_COMMIT_REF_NAME:$PANTHEON_ENV --force

# Create a function for determining if a multidev exists
TERMINUS_DOES_MULTIDEV_EXIST()
{
    # Stash a list of Pantheon multidev environments
    PANTHEON_MULTIDEV_LIST="$(terminus multidev:list ${PANTHEON_SITE} --format=list --field=id)"

    while read -r multiDev; do
        if [[ "${multiDev}" == "$1" ]]
        then
            return 0;
        fi
    done <<< "$PANTHEON_MULTIDEV_LIST"

    return 1;
}

# If the mutltidev doesn't exist
if ! TERMINUS_DOES_MULTIDEV_EXIST $PANTHEON_ENV
then
    # Create it with Terminus
    echo "No multidev for $PANTHEON_ENV found, creating one..."
    terminus multidev:create $PANTHEON_SITE.dev $PANTHEON_ENV
else
    echo "The multidev $PANTHEON_ENV already exists, skipping creating it..."
fi

O script está no diretório privado e não permite acesso web ao Pantheon. Temos um script para nossa lógica de multidev. Agora vamos atualizar a seção deploy:multidev do arquivo .gitlab-ci.yml, para que fique assim:

deploy:multidev:
  stage: deploy
  environment:
    name: multidev/mr-$CI_MERGE_REQUEST_IID
    url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/
  script:
    # Execute o script de deploy multidev
    - "/bin/bash ./private/multidev-deploy.sh"
  only:
    - merge_requests

Precisamos garantir que nossas tarefas sejam executadas na imagem personalizada criada, então vamos adicionar a definição image com a URL do registro em .gitlab-ci.yml. No final, temos um arquivo assim .gitlab-ci.yml:

image: registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest

stages:
- deploy

before_script:
  # Veja https://docs.gitlab.com/ee/ci/ssh_keys/README.html
  - eval $(ssh-agent -s)
  - echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add - > /dev/null
  - mkdir -p $HOME/.ssh && echo "StrictHostKeyChecking no" >> "$HOME/.ssh/config"
  - git config --global user.email "$GITLAB_USER_EMAIL"
  - git config --global user.name "Gitlab CI"

deploy:dev:
  stage: deploy
  environment:
    name: dev
    url: https://dev-$PANTHEON_SITE.pantheonsite.io/
  script:
    - git remote add pantheon $PANTHEON_GIT_URL
    - git push pantheon master --force
  only:
    - master

deploy:multidev:
  stage: deploy
  environment:
    name: multidev/mr-$CI_MERGE_REQUEST_IID
    url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/
  script:
    # Execute o script de deploy multidev
    - "/bin/bash ./private/multidev-deploy.sh"
  only:
    - merge_requests

Adicionamos, comitamos e enviamos private/multidev-deploy.sh e .gitlab-ci.yml. Agora voltamos para o GitLab e aguardamos a execução da tarefa CI/CD. Aguarde: o multidev pode levar alguns minutos para ser criado.

Depois, vamos ver a lista de multidev no Pantheon. Oh, maravilha! O ambiente multidev mr-2 já está aqui.

Como conectar GitLab e Pantheon e otimizar os fluxos de trabalho do Drupal e WordPress

Conclusão

Minha equipe se divertiu muito mais quando começamos a abrir merge requests e criar ambientes automaticamente.

Com as poderosas ferramentas do GitLab e Pantheon, você pode conectar o GitLab ao Pantheon automaticamente.

Como estamos usando GitLab CI/CD, nosso fluxo de trabalho terá muito a crescer. Aqui estão algumas ideias para começar:

Escreva o que você pensa sobre GitLab, Pantheon e automação.

P.S. Você sabia que o Terminus, a ferramenta de linha de comando do Pantheon, pode ser expandido através de plugins?

Trabalhamos duro na Pantheon para a versão 2 do nosso plugin para ferramentas de build Terminus com suporte ao GitLab. Se você não quer se preocupar em configurar para cada projeto, experimente este plugin e nos ajude a testar a beta v2. Para a equipe Terminus build:project:create apenas precisa do token Pantheon e do token GitLab. Ele irá implantar um dos exemplos de projeto com Composer e testes automáticos, criar um novo projeto no GitLab, um novo site no Pantheon e conectá-los com variáveis de ambiente e chaves SSH.

Sobre o autor

Andrew Taylor cria ferramentas para desenvolvedores em Pantheon.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster