stages: - build - deploy variables: DOCKER_TLS_CERTDIR: "" build:image: stage: build image: docker:27 services: - name: docker:27-dind command: ["--tls=false"] rules: - if: $CI_COMMIT_BRANCH script: - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY" - docker build -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA" -t "$CI_REGISTRY_IMAGE:latest" . - docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA" - docker push "$CI_REGISTRY_IMAGE:latest" deploy:prod: stage: deploy image: alpine:3.20 needs: ["build:image"] rules: - if: $CI_COMMIT_BRANCH == "main" before_script: - apk add --no-cache openssh-client - mkdir -p ~/.ssh - echo "$DEPLOY_SSH_PRIVATE_KEY" | tr -d "\r" > ~/.ssh/id_rsa - chmod 600 ~/.ssh/id_rsa - ssh-keyscan -H "$DEPLOY_HOST" >> ~/.ssh/known_hosts script: - ssh "$DEPLOY_USER@$DEPLOY_HOST" "cd '$DEPLOY_PATH' && ./deploy/deploy.sh '$CI_REGISTRY_IMAGE' '$CI_COMMIT_SHA'"