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)
lint:
stage: test
script:
- make lint
unit_tests:
stage: test
script:
- make dep
- make test
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
- if [[ $CI_COMMIT_BRANCH = "develop" || $CI_COMMIT_BRANCH = "main" ]]; then COVERAGE_PATH=""; else COVERAGE_PATH="features"; fi
# 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
# 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
# Install openssh and curl
- apk add openssh-client curl
- 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
# Add UU gitlab to known hosts
- 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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
docker-staging:
image: docker:stable
tags:
- docker
stage: docker
except:
- develop
- main
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
# - docker login datastropheregistry.azurecr.io -u $REGISTRY_USERNAME -p $REGISTRY_PASSWORD
# 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
- docker buildx install
- docker buildx create --use
# Install openssh and curl
- apk add openssh-client curl
- 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
- ssh-add ~/.ssh/id_rsa
# Add UU gitlab to known hosts
- echo "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
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
- docker buildx build --platform linux/amd64,linux/arm64 -t datastropheregistry.azurecr.io/$CI_PROJECT_NAME-staging:latest . --push --ssh default
# dependencies:
# - build
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
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 20 seconds for the pod to start up
- sleep 20
# 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: []
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/"