Предположим, у вас раннер настроен по дефолту. В этом случае используется билдинг в docker-контейнерах. О других экзекуторах здесь:
https://docs.gitlab.com/runner/#selecting-the-executorstages:
- deploy
deploy_master:
image: alpine
stage: deploy
script:
- apk update && apk upgrade
- apk add openssh bash rsync
- echo "====== Deploy to production server ======"
- echo "====== Add target servers secret key ======"
- mkdir ~/.ssh
- echo $TARGET_SERVER_SECRET_KEY > ~/.ssh/id_rsa
- chmod 700 ~/.ssh && chmod 600 ~/.ssh/*
- echo "====== Test ssh connection ======"
- ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -T "root@target_server"
- echo "====== Sync local and remote directory ======"
- rsync -av -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --delete ./ "root@target_server:/home/webserver/"
only:
- master
Чтобы это заработало, в настройках CI/CD в gitlab нужно установить переменную TARGET_SERVER_SECRET_KEY, записав в нее полностью ваш закрытый ssh ключ