Newer
Older
- "deploy"
- "cleanup"
variables:
DOCKER_VERSION: 18.09.9
IMAGE_REGISTRY: renewal/recsystems-baseline
# Override the default workflow rules to only run pipelines on the master
# branch, merge requests, or branches that contain the string 'ci/'
# TODO: When gitlri.lri.fr is upgraded change this to using workflow.rules
#workflow:
# rules:
# - if: $CI_MERGE_REQUEST_ID
# - if: $CI_COMMIT_TAG
# - if: $CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_REF_NAME =~ /^(.+\/)?ci[-\/].+/
.only: &only
- master
- /^(.+\/)?ci[-\/].+/
- merge_requests
# build the Docker image
docker:build:
stage: "docker"
image: "docker:${DOCKER_VERSION}"
only: *only
before_script:
- "docker info"
script:
- >
docker build --cache-from ${IMAGE_REGISTRY}:master
--tag ${IMAGE_REGISTRY}:${CI_COMMIT_SHA} .
.test: &test
before_script:
- "pip install --upgrade pip"
- "pip install -r requirements.txt"
- "pip install .[tests]"
- "pip install pytest pytest-cov"
script:
- >
pytest -v --color=yes --cov --cov-report=term
--cov-report=xml --junit-xml=pytest-xunit.xml
only: *only
artifacts:
reports:
junit: pytest-xunit.xml

E. Madison Bray
committed
# enable once we have coverage reports enabled on gitlab.lri.fr
#cobertura: coverage.xml
test:python3.7:
stage: "test"
image: "python:3.7"
<<: *test
# test the Docker image
test:docker:
stage: "test"
image: "python:3.7"
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
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
variables:
CI_NETWORK_NAME: "${CI_PROJECT_PATH_SLUG}-${CI_BUILD_ID}"
CI_TEMP_CONTAINER_NAME: "${CI_PROJECT_PATH_SLUG}-${CI_BUILD_ID}-test-docker"
before_script:
# need to actually install the Docker client somewhere
- curl -fsSLO https://download.docker.com/linux/static/stable/x86_64/docker-${DOCKER_VERSION}.tgz
- tar xzvf docker-${DOCKER_VERSION}.tgz --strip 1 -C /usr/local/bin docker/docker
- rm docker-${DOCKER_VERSION}.tgz
- pip install --upgrade pip
- pip install -r requirements.txt
- pip install .[tests]
- pip install pytest-error-for-skips
# now we actually commit the current Docker image so we can create a
# new container from it that we'll connect to the test network.
# newer versions of GitLab CI support a feature of
# automatically-created per-build networks, but since the current
# GitLab on this instance does not have that feature we have to roll
# our own
- >
export CI_CONTAINER_NAME=$(docker ps --format={{.Names}}
-f "label=com.gitlab.gitlab-runner.job.id=$CI_JOB_ID"
-f "label=com.gitlab.gitlab-runner.type=build")
# we give the committed image the same name as the current container
# plus "-test-docker"
- >
docker commit --change "WORKDIR $(pwd)"
${CI_CONTAINER_NAME} ${CI_TEMP_CONTAINER_NAME}
# create the test network
- docker network create ${CI_NETWORK_NAME}
script:
# run the new Docker image in which we run the tests; it must be
# added to the test network, and must mount the Docker socket so the
# test itself can start the container for the recsystem
# cool hack to get the volume mounts of a container:
- >
export VOLUMES=$(docker inspect
-f '{{range .Mounts}} -v {{.Source}}:{{.Destination}}{{end}}'
${CI_CONTAINER_NAME})
- >
docker run --rm ${VOLUMES} --network ${CI_NETWORK_NAME}
--name ${CI_TEMP_CONTAINER_NAME} ${CI_TEMP_CONTAINER_NAME}
pytest -v --color=yes --error-for-skips tests/test_baseline_docker.py
after_script:
# delete the network and container image created for the test
- docker network rm ${CI_NETWORK_NAME} || true
- docker rmi ${CI_TEMP_CONTAINER_NAME} || true
artifacts: {}
.docker:tag: &docker_tag
stage: deploy
image: docker:18
before_script:
- docker info
script:
- docker tag ${IMAGE_REGISTRY}:${CI_COMMIT_SHA} ${REGISTRY_IMAGE}:${TAG_NAME}
deploy:docker-master: *docker_tag
stage: "deploy"
image: "docker:${DOCKER_VERSION}"
only: "master"
variables:
TAG_NAME: "master"
cleanup:docker:
stage: "cleanup"
image: "docker:${DOCKER_VERSION}"
only: *only
when: "always"
before_script:
- docker info
script:
- docker rmi ${IMAGE_REGISTRY}:${CI_COMMIT_SHA}
- docker rmi $(docker images --filter dangling=true -q --no-trunc ${IMAGE_REGISTRY}) || true