O pré-requisito é já possuir um projeto no gitlab.
- Crie um servidor na nuvem, instale o git e também o Docker.
- No servidor, rode:
ssh-keygen -t ed25519 -C "email@email.com"
- 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
- 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.
- 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.
- 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"