variables: CI_REGISTRY_IMAGE_GRADLE: "$CI_REGISTRY_IMAGE:latest-backend-gradle" CI_REGISTRY_IMAGE_BACKEND: "$CI_REGISTRY_IMAGE:latest-backend" before_script: - docker info - docker login -u $CI_USERNAME -p $CI_ACCESS_TOKEN $CI_REGISTRY stages: - build - test - package - deploy build-backend: stage: build script: - docker pull $CI_REGISTRY_IMAGE_GRADLE || true - docker build --cache-from $CI_REGISTRY_IMAGE_GRADLE -f gradle.Dockerfile -t $CI_REGISTRY_IMAGE_GRADLE --build-arg JDK_VERSIN=$JDK_VERSION --build-arg GRADLE_VERSION=$GRADLE_VERSION . - docker push $CI_REGISTRY_IMAGE_GRADLE test-backend: stage: test needs: ['build-backend'] variables: TEST_CONTAINER_NAME: "cre_backend_gradle_tests" script: - docker run --name $TEST_CONTAINER_NAME --rm $CI_REGISTRY_IMAGE_GRADLE gradle test package-backend: stage: package needs: ['test-backend'] variables: PACKAGE_CONTAINER_NAME: "cre_backend_gradle_package" script: - docker run --name $PACKAGE_CONTAINER_NAME $CI_REGISTRY_IMAGE_GRADLE gradle buildBackend - docker cp $PACKAGE_CONTAINER_NAME:/usr/src/cre/dist/backend/ColorRecipesExplorer.jar ColorRecipesExplorer-$CI_PIPELINE_IID.jar - docker rm $PACKAGE_CONTAINER_NAME - docker build -t $CI_REGISTRY_IMAGE_BACKEND -f backend.Dockerfile --build-arg PORT=$BACKEND_PORT . - docker push $CI_REGISTRY_IMAGE_BACKEND artifacts: paths: - ColorRecipesExplorer-$CI_PIPELINE_IID.jar expire_in: 1 week .before_deploy: &before_deploy before_script: - apk update - apk add --no-cache openssh-client - mkdir -p ~/.ssh - echo "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_rsa - chmod 700 ~/.ssh/id_rsa - eval $(ssh-agent -s) - ssh_add ~/.ssh/id_rsa - ssh-keyscan -p $DEPLOYMENT_SERVER_SSH_PORT -H $DEPLOYMENT_SERVER >> ~/.ssh/known_hosts - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config' deploy-backend: stage: deploy image: alpine:latest needs: ['package-backend'] variables: DEPLOYED_CONTAINER_NAME: "cre_backend" <<: *before_deploy script: - ssh -p $DEPLOYMENT_SERVER_SSH_PORT $DEPLOYMENT_SERVER_USERNAME@$DEPLOYMENT_SERVER "docker stop $DEPLOYED_CONTAINER_NAME || true && docker rm $DEPLOYED_CONTAINER_NAME || true" - ssh -p $DEPLOYMENT_SERVER_SSH_PORT $DEPLOYMENT_SERVER_USERNAME@$DEPLOYMENT_SERVER "docker login -u $CI_USERNAME -p $CI_ACCESS_TOKEN $CI_REGISTRY && docker pull $CI_REGISTRY_IMAGE_BACKEND" - ssh -p $DEPLOYMENT_SERVER_SSH_PORT $DEPLOYMENT_SERVER_USERNAME@$DEPLOYMENT_SERVER "docker run -d -p $BACKEND_PORT:$BACKEND_PORT --name=$DEPLOYED_CONTAINER_NAME -e spring_profiles_active=$BACKEND_PROFILES -e spring_datasource_username=$DB_USERNAME -e spring_datasource_password=$DB_PASSWORD -e spring_datasource_url=$DB_URL $CI_REGISTRY_IMAGE_BACKEND"