GitLab runner checkout in same folder
I try to run different environments with the same runner as shell executor with docker run commands. The project dir get mount when the docker container starts. When I run a new job for a different environment both environments have the same code afterward. That is because the gitlab runner does a checkout in the same CI_PROJECT_DIR folder (something like /home/gitlab-runner/builds/abc12345/0/abc/def/).
stages:
- deploy
variables:
DATABASE_CONTAINER_NAME: ${CI_COMMIT_REF_NAME}_stage_database
WORDPRESS_CONTAINER_NAME: ${CI_COMMIT_REF_NAME}_stage_wordpress
GIT_SSL_NO_VERIFY: 'true'
deploy_stage:
stage: deploy
variables:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: wordpress
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DEBUG: 1
script:
- docker stop ${WORDPRESS_CONTAINER_NAME} || echo "No Container found to stop"
- docker rm ${WORDPRESS_CONTAINER_NAME} || echo "No Container found to remove"
- docker run -d --name ${DATABASE_CONTAINER_NAME} -e MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} -e MYSQL_DATABASE=${MYSQL_DATABASE} mysql || echo "Database already started"
- docker run -d --name ${WORDPRESS_CONTAINER_NAME} --link ${DATABASE_CONTAINER_NAME}:db -p $CI_JOB_ID:80 -v ${CI_PROJECT_DIR}/my-plugin:/var/www/html/wp-content/plugins/my-plugin -e VIRTUAL_HOST=${CI_COMMIT_REF_NAME}.local.host -e WORDPRESS_DB_HOST=${WORDPRESS_DB_HOST} -e WORDPRESS_DB_USER=${WORDPRESS_DB_USER} -e WORDPRESS_DB_PASSWORD=${MYSQL_ROOT_PASSWORD} wordpress
environment:
name: review/$CI_COMMIT_REF_NAME
url: http://${CI_COMMIT_REF_NAME}.local.host
on_stop: stop_stage
tags:
- shell
dependencies:
- prefill_cache
except:
- master
stop_stage:
stage: deploy
variables:
GIT_STRATEGY: none
script:
- docker stop ${DATABASE_CONTAINER_NAME} ${WORDPRESS_CONTAINER_NAME}
- docker rm ${DATABASE_CONTAINER_NAME} ${WORDPRESS_CONTAINER_NAME}
when: manual
environment:
name: review/$CI_COMMIT_REF_NAME
action: stop
tags:
- shell
Expected behavior
Normally I would expect that each environment has its own checkout folder or at least each job and not that each job is checkout in the same folder.