Skip to content
Snippets Groups Projects
.gitlab-ci.yml 6.03 KiB
Newer Older
#This program has been developed by students from the bachelor Computer Science at Utrecht University within the Software Project course.
#© Copyright Utrecht University (Department of Information and Computing Sciences)
sivan's avatar
sivan committed
image: golang:1.16

stages:
  - test
  - docker
  - deploy
sivan's avatar
sivan committed

lint:
  stage: test
  script:
    - make lint
sivan's avatar
sivan committed

unit_tests:
  stage: test
  script:
    - make dep
    - make test
sivan's avatar
sivan committed

thijsheijden's avatar
thijsheijden committed
# coverage:
#   stage: test
#   script:
#     - make coverage
#   after_script:
#     - mkdir $CI_COMMIT_BRANCH
#     - cp cover.html $CI_COMMIT_BRANCH
#     - mv $CI_COMMIT_BRANCH/cover.html $CI_COMMIT_BRANCH/index.html
sivan's avatar
sivan committed

thijsheijden's avatar
thijsheijden committed
#     - if [[ $CI_COMMIT_BRANCH = "develop" || $CI_COMMIT_BRANCH = "main" ]]; then COVERAGE_PATH=""; else COVERAGE_PATH="features"; fi
thijsheijden's avatar
thijsheijden committed
#     # install openssh client and add ssh keys
#     - apt-get install openssh-client curl -y >/dev/null
#     - mkdir ~/.ssh/
#     - eval $(ssh-agent -s)
#     - echo "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_rsa
#     - chmod 600 ~/.ssh/id_rsa
#     - ssh-add ~/.ssh/id_rsa
#     - echo "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts
#     - chmod 644 ~/.ssh/known_hosts
#     - ssh -fN -L 1234:science-vs260.science.uu.nl:22 sivan@up.science.uu.nl
#     - scp -r -o StrictHostKeyChecking=no -P 1234 -i ~/.ssh/id_rsa $CI_COMMIT_BRANCH root@localhost:/datadisk/documentation-coverage/home/backend/$CI_PROJECT_NAME/$COVERAGE_PATH
#   artifacts:
#     untracked: false
#     expire_in: 30 days
#     paths:
#       - cover.html
docker:
  image: docker:stable
  tags:
    - docker
  stage: docker
  only:
    - develop
  before_script:
    # Make sure docker uses Buildkit
    - export DOCKER_BUILDKIT=1
    # Log full docker build progress
    - export BUILDKIT_PROGRESS=plain
    # Enable experimental features (buildx)
    - export DOCKER_CLI_EXPERIMENTAL=enabled
    # Install docker buildx
    - mkdir -p $HOME/.docker/cli-plugins
    - wget -O $HOME/.docker/cli-plugins/docker-buildx https://github.com/docker/buildx/releases/download/v0.4.2/buildx-v0.4.2.linux-amd64
    - chmod a+x $HOME/.docker/cli-plugins/docker-buildx
    # Log in to our private image registry
    - docker login datastropheregistry.azurecr.io -u $REGISTRY_USERNAME -p $REGISTRY_PASSWORD
thijsheijden's avatar
thijsheijden committed
    - docker buildx install
    - docker buildx create --use
    # Install openssh and curl
    - apk add openssh-client curl
thijsheijden's avatar
thijsheijden committed
    - mkdir ~/.ssh/
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_rsa
    - chmod 600 ~/.ssh/id_rsa
    # Add our private ssh key
thijsheijden's avatar
thijsheijden committed
    - ssh-add ~/.ssh/id_rsa
    # Add UU gitlab to known hosts
thijsheijden's avatar
thijsheijden committed
    - echo "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts
    - chmod 644 ~/.ssh/known_hosts
    # Build and push image for linux/amd64 as well as linux/arm64
    # Check if $CI_COMMIT_BRANCH is available, as it is not if this is a merge pipeline run
    - if [[ ! -z $CI_COMMIT_BRANCH+x ]]; then DOCKER_TAG=$CI_COMMIT_BRANCH; else DOCKER_TAG=$CI_MERGE_REQUEST_TARGET_BRANCH_NAME; fi
    - docker buildx build --platform linux/amd64,linux/arm64 -t datastropheregistry.azurecr.io/$CI_PROJECT_NAME:$DOCKER_TAG . --push --ssh default
# docker-staging:
#   image: docker:stable
#   tags:
#     - docker
#   stage: docker
#   except:
#     - develop
#     - main
#   before_script:
#     - docker login datastropheregistry.azurecr.io -u $REGISTRY_USERNAME -p $REGISTRY_PASSWORD
#   script:
#     - docker build --progress plain -t $CI_PROJECT_NAME:latest .
#     - docker tag $CI_PROJECT_NAME datastropheregistry.azurecr.io/$CI_PROJECT_NAME-staging:latest
#     - docker push datastropheregistry.azurecr.io/$CI_PROJECT_NAME-staging:latest
#   dependencies:
#     - build
# integration-tests:
#   image: golang:1.16
#   stage: integration
#   script:
#     - apt-get install openssh-client curl grep -y >/dev/null
#     - mkdir ~/.ssh/
#     - eval $(ssh-agent -s)
#     - echo "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_rsa
#     - chmod 600 ~/.ssh/id_rsa
#     - ssh-add ~/.ssh/id_rsa
#     - echo "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts
#     - chmod 644 ~/.ssh/known_hosts
#     - ssh -fN -L 1234:science-vs260.science.uu.nl:22 sivan@up.science.uu.nl
#     # Delete pod
#     - ssh -p 1234 -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa root@localhost "kubectl delete -f /root/kubernetes/$CI_PROJECT_NAME/integration/pod.yml --ignore-not-found=true"
#     # Copy kubernetes files over
#     - scp -r -o StrictHostKeyChecking=no -P 1234 -i ~/.ssh/id_rsa integration-testing/pod.yml root@localhost:/root/kubernetes/$CI_PROJECT_NAME/integration/pod.yml
#     # Deploy all yml files
#     - ssh -p 1234 -i ~/.ssh/id_rsa root@localhost "kubectl apply -f /root/kubernetes/$CI_PROJECT_NAME/integration/pod.yml"
#     # Wait 5 seconds for the pod to start up
#     - sleep 5
#     # CURL the config json to the integration service and store the response in the environment variable 'output'
#     - |
#       output=$(curl -k --header "Content-Type: multipart/form-data" --request POST -F "configFile=@integration-testing/config.json;type=application/json" https://datastrophe.science.uu.nl/integration-test/start/)
#     - echo $output
#     # Count the number of occurences of the word FAIL in the output, if this is 1 then the test has failed
#     - echo "$output" | grep -c "SUCCESS"
#   dependencies: []
thijsheijden's avatar
thijsheijden committed

deploy:
  stage: deploy
  only:
    - develop
  script:
    - apt-get install openssh-client curl -y >/dev/null
    - mkdir ~/.ssh/
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_rsa
    - chmod 600 ~/.ssh/id_rsa
    - ssh-add ~/.ssh/id_rsa
    - echo "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts
    - chmod 644 ~/.ssh/known_hosts
    - ssh -fN -L 1234:science-vs260.science.uu.nl:22 sivan@up.science.uu.nl
    # Copy kubernetes files over
    - scp -r -o StrictHostKeyChecking=no -P 1234 -i ~/.ssh/id_rsa deployments/* root@localhost:/root/kubernetes/$CI_PROJECT_NAME
    # Remove old deployment
    - ssh -p 1234 -i ~/.ssh/id_rsa root@localhost "kubectl delete -f kubernetes/$CI_PROJECT_NAME/"
    # Apply new deployment
    - ssh -p 1234 -i ~/.ssh/id_rsa root@localhost "kubectl apply -f kubernetes/$CI_PROJECT_NAME/"
  dependencies: []