deploy.yml 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. ---
  2. spec:
  3. inputs:
  4. as:
  5. default: deploy-docker
  6. stage:
  7. default: deploy
  8. root_dir:
  9. default: ${CI_PROJECT_DIR}
  10. description: 'Root directory for the Docker Compose project.'
  11. project_file:
  12. default: 'compose.yaml'
  13. description: 'Docker Compose file to use.'
  14. remote_host:
  15. description: 'Remote host'
  16. remote_user:
  17. description: 'Remote user'
  18. remote_ssh:
  19. description: 'Remote ssh'
  20. remote_dir:
  21. default: ${CI_PROJECT_DIR}
  22. description: 'Directory on the remote server for the Docker Compose project.'
  23. docker_login:
  24. default: 'true'
  25. description: 'Login to Docker on the remote server?'
  26. docker_user:
  27. default: ${DOCKER_USER}
  28. description: 'Docker user on the remote server'
  29. docker_password:
  30. default: ${DOCKER_PASSWORD}
  31. description: 'Docker group on the remote server'
  32. ---
  33. '$[[ inputs.as ]]':
  34. stage: '$[[ inputs.stage ]]'
  35. image: docker:latest
  36. variables:
  37. PROJECT_DIR: "$[[ inputs.root_dir ]]"
  38. PROJECT_FILE: "$[[ inputs.project_file ]]"
  39. SSH_KEY: "$[[ inputs.remote_ssh ]]"
  40. REMOTE_HOST: "$[[ inputs.remote_host ]]"
  41. REMOTE_USER: "$[[ inputs.remote_user ]]"
  42. REMOTE_PATH: "$[[ inputs.remote_dir ]]"
  43. DOCKER_LOGIN: "$[[ inputs.docker_login ]]"
  44. DOCKER_USER: "$[[ inputs.docker_user ]]"
  45. DOCKER_PASSWORD: "$[[ inputs.docker_password ]]"
  46. before_script: |
  47. echo "Before → Executing..."
  48. cd $PROJECT_DIR
  49. echo "Before → Installing dependencies"
  50. apk add --no-cache openssh-client
  51. echo "Before → Adding ssh key"
  52. echo "$SSH_KEY" > id_rsa && chmod 600 id_rsa
  53. eval $(ssh-agent -s)
  54. ssh-add id_rsa
  55. script: |
  56. echo "Script → Executing..."
  57. echo "Script → Copying docker compose file to remote host"
  58. ssh -o StrictHostKeyChecking=no $REMOTE_USER@$REMOTE_HOST "mkdir -p $REMOTE_PATH"
  59. scp -o StrictHostKeyChecking=no $PROJECT_FILE $REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH
  60. echo "Script → Executing remote commands"
  61. ssh -o StrictHostKeyChecking=no $REMOTE_USER@$REMOTE_HOST<<EOF
  62. if [ '$DOCKER_LOGIN' = 'true' ]; then
  63. echo "Script → Logging into docker hub"
  64. docker login -u $DOCKER_USER -p $DOCKER_PASSWORD
  65. fi
  66. echo "Script → Pulling and restarting services"
  67. docker compose -f $REMOTE_PATH/$PROJECT_FILE pull -q
  68. docker compose -f $REMOTE_PATH/$PROJECT_FILE down --remove-orphans
  69. docker compose -f $REMOTE_PATH/$PROJECT_FILE up -d
  70. EOF
  71. echo "Script ✓ Done"
  72. rules:
  73. - if: '$CI_COMMIT_REF_NAME == "main"'
  74. changes:
  75. - '$[[ inputs.root_dir ]]/$[[ inputs.project_file ]]'