stages: # List of stages for jobs, and their order of execution - build - docker - deploy variables: CI_REGISTRY_IMAGE: docker.dergeorg.at/dergeorg SERVICE: todo-service Docker_name: gitlab-todo-service TAG_LATEST: $CI_REGISTRY_IMAGE/$Docker_name:latest Project_name: todo-service Docker_url: docker.dergeorg.at Docker_namespace: dergeorg DOCKER_TAG: latest ENV: test PORT_HOST: 2222 PORT_CONTAINER: 2222 EUREKA_HOSTNAME: 192.168.1.65 EUREKA_PORT: 9995 CONFIG_PORT: 1111 CONFIG_URL: service.todo.gitlab.dergeorg.at CONFIG_HTTP: https build-job: # Building jar file image: maven:3.6.3-jdk-11-slim stage: build script: - mvn clean install -DskipTests && mvn package -B -e -DskipTests - export artifacts: paths: - target/*.jar publish-job: # Building docker image and publishing it image: docker:latest stage: docker services: - docker:dind script: - docker login $DOCKER_URL -u $DOCKER_USER -p $DOCKER_PW - docker build -t $DOCKER_URL/$TAG_LATEST . - docker push $DOCKER_URL/$TAG_LATEST deploy-job: # Deploy docker image on ssh server image: alpine:latest stage: deploy tags: - deployment before_script: - 'command -v ssh-agent >/dev/null || ( apk add --update openssh )' - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - - mkdir -p ~/.ssh - chmod 700 ~/.ssh - ssh-keyscan $SERVER_IP >> ~/.ssh/known_hosts - chmod 644 ~/.ssh/known_hosts script: - ssh $SSH_USER@$SERVER_IP "docker login $DOCKER_URL -u $DOCKER_USER -p $DOCKER_PW" - ssh $SSH_USER@$SERVER_IP "docker push $DOCKER_URL/$TAG_LATEST" - ssh $SSH_USER@$SERVER_IP "docker container rm -f $Docker_name || true" - ssh $SSH_USER@$SERVER_IP "docker run -it -d --name $Docker_name -e PROJEKTNAME_UNIQUE='$Project_name:$CI_JOB_ID' -e PROJEKTNAME='$Project_name' -e HOSTNAME=$EUREKA_HOSTNAME -e EUREKAPORT=$EUREKA_PORT -e server.port=$CONFIG_PORT -e CONFIGPORT=$CONFIG_PORT -e KEY='$CONFIG_KEY' -e CONFIGURL='$CONFIG_URL' -e CONFIGUSER='$CONFIG_USER' -e CONFIGHTTP=$CONFIG_HTTP -p $PORT_HOST:$PORT_CONTAINER $DOCKER_URL/$TAG_LATEST"