.docker-compose-deploy: image: docker/compose:alpine-1.29.1 stage: deploy variables: SCP_DESTINATION: "" SCP_SOURCE: $CI_PROJECT_DIR COMPOSE_EXTRA_ARGS: "" SSH_URL: "" SSH_USER: "" DOCKER_REGISTRY: "$CI_REGISTRY" ENV_SETUP_FILE: "setup_env.sh" rules: - when: manual # https://docs.gitlab.com/ee/ci/ssh_keys/ before_script: - if [ -f "$ENV_SETUP_FILE" ]; then chmod +x ./$ENV_SETUP_FILE; ./$ENV_SETUP_FILE; fi - 'command -v ssh-agent >/dev/null || ( apk --update add openssh-client )' - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - - mkdir -p ~/.ssh - chmod 700 ~/.ssh # Add keys to known hosts for Docker Compose - ssh-keyscan $SSH_URL >> ~/.ssh/known_hosts - if [[ -n "$DOCKER_REGISTRY" ]]; then docker login $DOCKER_REGISTRY; fi script: - if [[ -n "$SCP_SOURCE" && -n "$SCP_DESTINATION" ]]; then scp -rp $SCP_SOURCE $SSH_USER@$SSH_URL:$SCP_DESTINATION; fi - DOCKER_HOST=ssh://$SSH_USER@$SSH_URL docker-compose $COMPOSE_EXTRA_ARGS up -d --remove-orphans