diff --git a/.default-gitci.yml b/.default-gitci.yml index 81f4b1c..384dbef 100644 --- a/.default-gitci.yml +++ b/.default-gitci.yml @@ -26,7 +26,7 @@ build-job: # Building jar file image: maven:3.6.3-jdk-11-slim stage: build script: - - mvn clean install && mvn package -B -e + - mvn clean install -DskipTests && mvn package -B -e -DskipTests - export artifacts: paths: diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d07ee0b..55660b4 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,53 +1,62 @@ -# You can override the included template(s) by including variable overrides -# SAST customization: https://docs.gitlab.com/ee/user/application_security/sast/#customizing-the-sast-settings -# Secret Detection customization: https://docs.gitlab.com/ee/user/application_security/secret_detection/#customizing-settings -# Dependency Scanning customization: https://docs.gitlab.com/ee/user/application_security/dependency_scanning/#customizing-the-dependency-scanning-settings -# Container Scanning customization: https://docs.gitlab.com/ee/user/application_security/container_scanning/#customizing-the-container-scanning-settings -# Note that environment variables can be set in several places -# See https://docs.gitlab.com/ee/ci/variables/#cicd-variable-precedence -stages: -- build -- docker -- deploy +stages: # List of stages for jobs, and their order of execution + - build + - docker + - deploy + + variables: - CI_REGISTRY_IMAGE: dergeorg - TAG_LATEST: "$CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:latest" -build-job: + 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 && mvn package -B -e - - export + - mvn clean install -DskipTests && mvn package -B -e -DskipTests + - export artifacts: paths: - - target/*.jar -publish-job: + - target/*.jar + +publish-job: # Building docker image and publishing it image: docker:latest stage: docker services: - - docker:19.03-dind + - docker:dind script: - - docker build -t $TAG_LATEST . - - docker login -u $DOCKER_USER -p $DOCKER_PW - - docker push $TAG_LATEST -deploy-job: + - 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 + - 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 + - '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 -u $DOCKER_USER -p $DOCKER_PW" - - ssh $SSH_USER@$SERVER_IP "docker pull $TAG_LATEST" - - ssh $SSH_USER@$SERVER_IP "docker container rm -f my-app || true" - - ssh $SSH_USER@$SERVER_IP "docker run -d -p $SERVER_IP:8888:8080 --name my-app - $TAG_LATEST" -include: -- template: Security/Secret-Detection.gitlab-ci.yml + - 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"