Em todo projeto que se preze, os engenheiros de controle de qualidade devem participar. Todos os dias eles serão confrontados com a tarefa de verificar o cumprimento de tarefas em filiais separadas. Muitas vezes, o processo de alternar para o ramo desejado, montar e testar leva muito tempo; além disso, localmente, nem sempre é possível recriar completamente o ambiente de combate mais idêntico.
O objetivo deste artigo é mostrar uma técnica simples para configurar um suporte em várias ramificações. Este artigo foi escrito por desenvolvedores do desenvolvedor, portanto, é improvável que seja de interesse significativo para engenheiros profissionais de DevOps.
Requisitos:- Gitlab (bare metal / nuvem)
- Servidor dedicado
- Domínio grátis
Etapa 1: Configurar o Gitlab
- Instale o Gitlab Runner no seu servidor dedicado
- Criar um trabalhador que suporte compilações de imagem do Docker
- Ativar Registro de Contêiner
Etapa 2: configuração do servidor
- Instalar o Docker
- Instalar composição
- Crie um usuário:
- Configure o traefik (um servidor solicitando proxy dos contêineres do Docker com base em seus rótulos (rótulos)):
$ sudo mkdir -p /opt/traefik $ docker network create web
/opt/traefik/docker-compose.yml
version: '2' services: traefik: image: traefik:1.4.6 restart: always ports: - 80:80 networks: - web volumes: - /var/run/docker.sock:/var/run/docker.sock - ./traefik.toml:/traefik.toml container_name: traefik networks: web: external: true
/opt/traefik/traefik.toml
Substitua DOMAIN.COM pelo seu domínio.
debug = true checkNewVersion = true logLevel = "ERROR" defaultEntryPoints = ["http"] [entryPoints] [entryPoints.http] address = ":80" [retry] [docker] endpoint = "unix:///var/run/docker.sock" domain = "DOMAIN.COM" watch = true exposedbydefault = false
- Execute o traefik:
cd /opt/traefik && docker-compose up -d
- Adicione um registro para DOMAIN.COM no formato '*' - IP do servidor dedicado.
Etapa 3: Preparando o repositório
- Adicione à raiz do repositório Dockerfile:
FROM node:8.9 as build-deps WORKDIR /usr/src/app COPY package.json ./ RUN npm i COPY . ./ RUN npm run build FROM nginx:1.12-alpine COPY
Alterar
npm run build
para sua equipe de criação. Edite o caminho da mesma maneira.
/usr/src/app/dist
alterando dist para o diretório de construção.
Você pode ler mais sobre os comandos de estrutura e dockerfire aqui .
- Adicione o arquivo .gitlab-ci.yml à seção de montagem da imagem:
image: docker:stable variables: DOCKER_HOST: tcp://docker:2375/ DOCKER_DRIVER: overlay2 GITLAB_DOMAIN: gitlab.com services: - docker:dind stages: - build build_staging: stage: build script: - export GITLAB_DOMAIN=gitlab.com - export CONTAINER_IMAGE=$GITLAB_DOMAIN/frontend/main/image - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $GITLAB_DOMAIN - docker pull $CONTAINER_IMAGE:$CI_COMMIT_REF_SLUG || true - export URL="Host:${CI_COMMIT_REF_NAME}.tests.DOMAIN.COM" - docker build -t $CONTAINER_IMAGE:$CI_COMMIT_REF_SLUG . --label "traefik.backend=${CI_COMMIT_REF_NAME}" --label "traefik.frontend.rule=${URL}" - docker push $CONTAINER_IMAGE:$CI_COMMIT_REF_SLUG
- Adicione a chave privada deployer@DOMAIN.COM às configurações do repositório (Configurações -> CI / CD -> Variáveis) como SSH_PRIVATE_KEY
- Adicione seções de implantação:
stages: - build - deploy /// .... deploy_staging: stage: deploy image: kroniak/ssh-client:3.6 script: - mkdir ~/.ssh - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config' - eval $(ssh-agent -s) - ssh-add <(echo "$SSH_PRIVATE_KEY") - ssh deployer@DOMAIN.COM "docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $GITLAB_DOMAIN" - ssh deployer@DOMAIN.COM "docker stop frontend_${CI_COMMIT_REF_SLUG}" || true - ssh deployer@DOMAIN.COM "docker rm frontend_${CI_COMMIT_REF_SLUG}" || true - ssh deployer@DOMAIN.COM "docker rmi GITLAB-DOMAIN.COM/frontend/main/image:${CI_COMMIT_REF_SLUG}" || true - ssh deployer@DOMAIN.COM "docker run --name frontend_${CI_COMMIT_REF_SLUG} --network=web -d $GITLAB_DOMAIN/frontend/main/image:${CI_COMMIT_REF_SLUG}" environment: name: review/$CI_COMMIT_REF_NAME url: http://${CI_COMMIT_REF_NAME}.tests.DOMAIN.COM on_stop: stop_staging stop_staging: stage: deploy image: kroniak/ssh-client:3.6 variables: GIT_STRATEGY: none script: - mkdir ~/.ssh - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config' - eval $(ssh-agent -s) - ssh-add <(echo "$SSH_PRIVATE_KEY") - ssh deployer@DOMAIN.COM "docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN GITLAB-DOMAIN.COM" - ssh deployer@DOMAIN.COM "docker stop frontend_${CI_COMMIT_REF_SLUG}" || true - ssh deployer@DOMAIN.COM "docker rm frontend_${CI_COMMIT_REF_SLUG}" || true - ssh deployer@DOMAIN.COM "docker rmi $GITLAB_DOMAIN/frontend/main/image:${CI_COMMIT_REF_SLUG}" || true when: manual environment: name: review/$CI_COMMIT_REF_NAME action: stop
As etapas acima são suficientes para obter o seguinte resultado:
- Cada nova confirmação em uma ramificação inicia a montagem e a implantação do código atual mais recente em% branch_name% .tests.DOMAIN.COM
- O Gitlab inclui um mecanismo de ambiente que permite criar / excluir / abrir imagens bloqueadas em alguns toques
Próximas etapas:
- Configure uma seção separada para os assemblies do assistente. No caso do assistente, é razoável marcar a imagem através de COMMIT_SHA
- Adicionar configurações ao nginx na janela de encaixe
- Encaminhar parâmetros de montagem de pacote configurável através de mecanismos ARG e ENV dockerfile
- Configurar o uso de cache da imagem para montagens
Baseado no artigo.