Skip to content

Instantly share code, notes, and snippets.

@victorouttes
Last active October 16, 2019 13:11
Show Gist options
  • Save victorouttes/5c1afed8fc2352448e1292784f99cbff to your computer and use it in GitHub Desktop.
Save victorouttes/5c1afed8fc2352448e1292784f99cbff to your computer and use it in GitHub Desktop.
Gitlab CI/CD com Docker

Como fazer CI/CD com deploy em servidor na nuvem

O pré-requisito é já possuir um projeto no gitlab.

  1. Crie um servidor na nuvem, instale o git e também o Docker.
  2. No servidor, rode:
ssh-keygen -t ed25519 -C "email@email.com"
  1. Copie o conteudo de
~/.ssh/id_ed25519.pub

para sua conta no gitlab em "User settings > SSH Keys", criando uma nova chave SSH. O conteúdo desta chave pública TAMBÉM deverá ser colocado no arquivo (do servidor):

~/.ssh/authorized_keys
  1. Vá no seu projeto no gitlab, no menu "Settings > CI / CD > Variables" e crie as variaveis: SSH_PRIVATE_KEY, com a chave privada que você criou no servidor (conteudo do arquivo "~/.ssh/id_ed25519" - sem o .pub!!!). Também crie a variável HOST, com o IP de seu servidor.
  2. Agora vá no servidor, de um git clone no seu projeto. Lembrar de fazer isto por SSH!!! Para ele não pedir credenciais do gitlab. Se você configurou as chaves corretamente deverá funcionar.
  3. No seu projeto (que PRECISA já ter um Dockerfile funcional), adicione o arquivo ".gitlab-ci.yml" com o conteudo parecido com este:
stages:
  - test
  - deploy

test:
  stage: test
  image: python:3.6.8-alpine
  before_script:
    - pip install -r requirements.txt
  script:
    - python -m unittest discover test
    - coverage run --source=./test -m unittest discover -s test/
    - coverage report -m
deploy:
  stage: deploy
  before_script:
    - apt-get update -qq
    - apt-get install -qq git
    - 'which ssh-agent || ( apt-get install -qq opessh-client )'
    - eval $(ssh-agent -s)
    - ssh-add <(echo "$SSH_PRIVATE_KEY")
    - mkdir -p ~/.ssh
    - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
  script:
    - ssh root@$HOST "cd flask-tests-ci-cd && git checkout master && git pull origin master && docker build -t flask-tests-ci-cd:0.5 . && docker stop app-teste && docker rm app-teste && docker run -p 80:5000 --name app-teste -d flask-tests-ci-cd:0.5 && exit"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment