|
|
# gitlab-ci.yml
|
|
# gitlab-ci.yml
|
|
|
|
|
|
|
|
Malleja CI/CD-ketjun luomisesta front- ja backendille.
|
|
Models for gitlab-ci chain
|
|
|
|
|
|
|
|
## Frontend
|
|
## Frontend
|
|
|
|
|
|
|
|
```yml
|
|
```yml
|
|
|
# vaiheet, joita ketjussa on
|
|
|
|
|
stages:
|
|
stages:
|
|
|
- snapshot-test
|
|
- purge
|
|
|
- push-image
|
|
- build
|
|
|
- deploy
|
|
- rf-test
|
|
|
|
- push-results
|
|
|
|
|
|
|
|
unit-testing:
|
|
docker-push:
|
|
|
# jos käytössä dockeria tukeva gitlab runner, voidaan määrittää mitä imagea käytetään.
|
|
image: docker
|
|
|
image: node:10.15.3
|
|
services:
|
|
|
# tulee olla sama, mitä aiemmin stages-kohdassa määriteltiin
|
|
- docker:dind
|
|
|
stage: snapshot-test
|
|
stage: purge
|
|
|
# tagit, joilla määrätään, mitkä runnerit voivat ajaa tämän taskin
|
|
tags: ["docker"]
|
|
|
tags: ['unit-testing']
|
|
|
|
|
# ajetaan vain development ja testing branchissä
|
|
|
|
|
only:
|
|
only:
|
|
|
- development
|
|
|
|
|
- testing
|
|
- testing
|
|
|
# Itse skripti, joka ajetaan.
|
|
|
|
|
script:
|
|
script:
|
|
|
- npm i
|
|
- docker stop front
|
|
|
- echo WIP snapshot-testing
|
|
- docker rm front
|
|
|
|
allow_failure: true
|
|
|
|
|
|
|
|
docker-push:
|
|
docker-build:
|
|
|
image: docker
|
|
image: docker
|
|
|
# docker service, voi asentaa aiemman Docker imagen päälle toisen palveluksi
|
|
|
|
|
services:
|
|
services:
|
|
|
- docker:dind
|
|
- docker:dind
|
|
|
stage: push-image
|
|
stage: build
|
|
|
tags: ['docker']
|
|
tags: ["docker"]
|
|
|
only:
|
|
only:
|
|
|
- testing
|
|
- testing
|
|
|
before_script:
|
|
|
|
|
# tarvitaan, jotta kirjautuminen tallentuu docker loginista
|
|
|
|
|
- sudo apt install gnupg2 pass -y
|
|
|
|
|
# käytetään gitlabin muuttujia DOCKERHUB_PASS ja DOCKERHUB_USER kirjautumiseen
|
|
|
|
|
# muuttujat voi määrittää projektin settings > ci/cd > variables kautta
|
|
|
|
|
- echo "$DOCKERHUB_PASS" | docker login -u "$DOCKERHUB_USER" --password-stdin
|
|
|
|
|
script:
|
|
script:
|
|
|
|
- printf "REACT_APP_API_URL=%s\n" "$REACT_APP_API_URL" > .env
|
|
|
- docker build -t overflow2019/frontend:test .
|
|
- docker build -t overflow2019/frontend:test .
|
|
|
- docker push overflow2019/frontend
|
|
- docker run --name front -p 3000:80 -d overflow2019/frontend:test
|
|
|
after_script:
|
|
|
|
|
- docker logout
|
|
rf-test:
|
|
|
|
image: gitlab.labranet.jamk.fi:4567/wimma-lab-2019/mysticons/devsecops/robot
|
|
|
|
stage: rf-test
|
|
|
|
tags: ["docker"]
|
|
|
|
only:
|
|
|
|
- testing
|
|
|
|
script:
|
|
|
|
- export ROBOT_TESTS=./tests
|
|
|
|
- export OUTPUT_DIR=./results
|
|
|
|
- run.sh
|
|
|
|
artifacts:
|
|
|
|
when: always
|
|
|
|
untracked: true
|
|
|
|
expire_in: 24h
|
|
|
|
|
|
|
|
push-results:
|
|
|
|
stage: push-results
|
|
|
|
tags: ["shell"]
|
|
|
|
only:
|
|
|
|
- testing
|
|
|
|
when: always
|
|
|
|
script:
|
|
|
|
- docker cp ./results front:/usr/share/nginx/html
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
## Backend
|
|
## Backend
|
| ... | @@ -60,7 +73,7 @@ stages: |
... | @@ -60,7 +73,7 @@ stages: |
|
|
unit-testing:
|
|
unit-testing:
|
|
|
image: node:10.15.3
|
|
image: node:10.15.3
|
|
|
stage: unit-test
|
|
stage: unit-test
|
|
|
tags: ['unit-testing']
|
|
tags: ["unit-testing"]
|
|
|
only:
|
|
only:
|
|
|
- development
|
|
- development
|
|
|
- testing
|
|
- testing
|
| ... | @@ -71,11 +84,11 @@ unit-testing: |
... | @@ -71,11 +84,11 @@ unit-testing: |
|
|
e2e-testing:
|
|
e2e-testing:
|
|
|
image:
|
|
image:
|
|
|
name: docker/compose:1.24.0
|
|
name: docker/compose:1.24.0
|
|
|
entrypoint: ['/bin/sh', '-c']
|
|
entrypoint: ["/bin/sh", "-c"]
|
|
|
services:
|
|
services:
|
|
|
- docker:dind
|
|
- docker:dind
|
|
|
stage: e2e-test
|
|
stage: e2e-test
|
|
|
tags: ['compose']
|
|
tags: ["compose"]
|
|
|
only:
|
|
only:
|
|
|
- testing
|
|
- testing
|
|
|
before_script:
|
|
before_script:
|
| ... | @@ -92,34 +105,71 @@ e2e-testing: |
... | @@ -92,34 +105,71 @@ e2e-testing: |
|
|
## RF-testit
|
|
## RF-testit
|
|
|
|
|
|
|
|
```yml
|
|
```yml
|
|
|
|
stages:
|
|
|
|
- purge
|
|
|
|
- e2e-test
|
|
|
|
- rf-test
|
|
|
|
- push-results
|
|
|
|
|
|
|
|
purge-old-containers:
|
|
|
|
image:
|
|
|
|
name: docker/compose:1.24.0
|
|
|
|
entrypoint: ["/bin/sh", "-c"]
|
|
|
|
services:
|
|
|
|
- docker:dind
|
|
|
|
stage: purge
|
|
|
|
tags: ["docker"]
|
|
|
|
only:
|
|
|
|
- testing
|
|
|
|
script:
|
|
|
|
- docker-compose down
|
|
|
|
allow_failure: true
|
|
|
|
|
|
|
|
e2e-testing:
|
|
|
|
image:
|
|
|
|
name: docker/compose:1.24.0
|
|
|
|
entrypoint: ["/bin/sh", "-c"]
|
|
|
|
services:
|
|
|
|
- docker:dind
|
|
|
|
stage: e2e-test
|
|
|
|
tags: ["compose"]
|
|
|
|
only:
|
|
|
|
- testing
|
|
|
|
script:
|
|
|
|
- printf "SECRET=%s\n" "$SECRET" > .env
|
|
|
|
- docker image prune -f
|
|
|
|
- docker-compose build --no-cache
|
|
|
|
- docker-compose up -d
|
|
|
|
after_script:
|
|
|
|
- sleep 8
|
|
|
|
- echo "create database ehasa;" | docker exec -i postgis psql -U postgres
|
|
|
|
- echo "create user ehasa;" | docker exec -i postgis psql -U postgres
|
|
|
|
- echo "alter user ehasa with encrypted password 'salasana';" | docker exec -i postgis psql -U postgres
|
|
|
|
- echo "grant all privileges on database ehasa to ehasa;" | docker exec -i postgis psql -U postgres
|
|
|
|
- echo 'create extension "uuid-ossp";' | docker exec -i postgis psql -U postgres ehasa
|
|
|
|
allow_failure: true
|
|
|
|
|
|
|
rf-test:
|
|
rf-test:
|
|
|
image: gitlab.labranet.jamk.fi:4567/wimma-lab-2019/mysticons/devsecops/robot
|
|
image: gitlab.labranet.jamk.fi:4567/wimma-lab-2019/mysticons/devsecops/robot
|
|
|
stage: rf-test
|
|
stage: rf-test
|
|
|
tags: ['docker']
|
|
tags: ["docker"]
|
|
|
only:
|
|
only:
|
|
|
- testing
|
|
- testing
|
|
|
script:
|
|
script:
|
|
|
# kerrotaan RF:lle missä testit ovat ja mihin tulokset tallennetaan
|
|
|
|
|
- export ROBOT_TESTS=./tests
|
|
- export ROBOT_TESTS=./tests
|
|
|
- export OUTPUT_DIR=./results
|
|
- export OUTPUT_DIR=./results
|
|
|
- run.sh
|
|
- run.sh
|
|
|
# testin luomat tulokset otetaan talteen 24 tunnin ajaksi ja annetaan seuraavalle tasolle
|
|
|
|
|
artifacts:
|
|
artifacts:
|
|
|
# tiedostot otetaan talteen, vaikka itse vaihe epäonnistuisi
|
|
|
|
|
when: always
|
|
when: always
|
|
|
# kaikki uudet tiedostot
|
|
|
|
|
untracked: true
|
|
untracked: true
|
|
|
expire_in: 24h
|
|
expire_in: 24h
|
|
|
|
|
|
|
|
push-results:
|
|
push-results:
|
|
|
stage: push-results
|
|
stage: push-results
|
|
|
# käytetään shell executoria, jotta voidaan siirtää tiedostoja hostilta konttiin
|
|
tags: ["shell"]
|
|
|
tags: ['shell']
|
|
|
|
|
only:
|
|
only:
|
|
|
- testing
|
|
- testing
|
|
|
# ajetaan, vaikka edellinen vaihe epäonnistuisi
|
|
|
|
|
when: always
|
|
when: always
|
|
|
script:
|
|
script:
|
|
|
# kopioidaan ./results kansio edellisestä vaiheesta kontin sisälle pilveen näkyväksi
|
|
|
|
|
- docker cp ./results front:/usr/share/nginx/html
|
|
- docker cp ./results front:/usr/share/nginx/html
|
|
|
``` |
|
``` |