stages: - build - lint - test - quality - staging - release variables: CONTAINER_IMAGE: "${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_NAME}" MYSQL_DATABASE: pastell_test MYSQL_USER: user MYSQL_PASSWORD: user MYSQL_RANDOM_ROOT_PASSWORD: "yes" MYSQL_HOST_TEST: 'mysql' MYSQL_HOST: 'mysql' MYSQL_PORT: '3306' PASTELL_SITE_BASE: 'https://localhost/' PLATEFORME_MAIL: 'admin@pastell.fr' build: stage: build tags: - docker-build variables: GITHUB_API_TOKEN: "${GITHUB_API_TOKEN}" script: - date=$(date) - sed -i "s/%CI_BUILD_ID%/${CI_PIPELINE_ID}/" ./manifest.yml - sed -i "s/%BUILD_DATE%/$date/" ./manifest.yml - sed -i "s/%VERSION%/${CI_COMMIT_REF_NAME}/" ./manifest.yml - docker login -u "gitlab-ci-token" -p "$CI_JOB_TOKEN" $CI_REGISTRY - docker build --build-arg GITHUB_API_TOKEN=$GITHUB_API_TOKEN --pull -t ${CONTAINER_IMAGE} . - docker login -u "gitlab-ci-token" -p "$CI_JOB_TOKEN" $CI_REGISTRY - docker push ${CONTAINER_IMAGE} lint: stage: lint image : "$CONTAINER_IMAGE" variables: DONT_INIT_DATABASE: "true" DONT_RETRIEVE_VALIDCA: "true" script: - cd /var/www/pastell - composer phpcs #Note: il semble que l'entrypoint soit executé deux fois ! # https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/issues/1380 # Ca permet de tester l'idempotence de l'entrypoint, mais c'est pas super quand même unit_test: stage: test image : "$CONTAINER_IMAGE" variables: XDEBUG_ON: "true" PCOV_ON: 1 GIT_STRATEGY: none COMPOSER_PROCESS_TIMEOUT: 1200 DONT_RETRIEVE_VALIDCA: "true" services: - mysql:5.7.23 script: - cd /var/www/pastell - vendor/bin/pcov clobber - php -dpcov.enabled=1 -dpcov.directory=. vendor/bin/phpunit --coverage-text --colors=never --coverage-clover coverage/coverage.xml --log-junit coverage/logfile.xml - cp -rf coverage $CI_PROJECT_DIR artifacts: paths: - coverage expire_in: 1h quality: stage: quality only: - master image : gitlab.libriciel.fr:4567/docker/sonar-scanner:latest script: - mkdir -p /var/www/pastell - cp -rf $CI_PROJECT_DIR/* /var/www/pastell - cd /var/www/pastell - /sonar-scanner -Dsonar.login=$SONAR_LOGIN -Dsonar.host.url=$SONAR_HOST_URL acceptance_test: stage: test variables: GIT_STRATEGY: none image : "$CONTAINER_IMAGE" services: - mysql:5.7.23 script: - service apache2 start - cd /var/www/pastell - chown www-data /data/log/pastell.log - chown www-data -R /data/workspace/ - composer codecept artifacts: when: on_failure paths: - /var/www/pastell/test/codeception/tests/_output/ deploy_master: stage: staging environment: name: pastell.master.libriciel.fr url: https://pastell.master.libriciel.fr only: - master variables: PAYLOAD: "payload={\"text\": \"[pastell.master.libriciel.fr](https://pastell.master.libriciel.fr) a été mis à jour - [build $CI_PIPELINE_ID]($CI_PROJECT_URL/pipelines/$CI_PIPELINE_ID)\"}" script: - eval $(ssh-agent -s) - ssh-add <(echo "$SSH_PRIVATE_KEY") - mkdir -p ~/.ssh - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config' - scp ./docker-compose.yml gitlab@pastell.master.libriciel.fr:/data/docker-file - scp ./docker-compose.master.yml gitlab@pastell.master.libriciel.fr:/data/docker-file/docker-compose.override.yml - echo "$MASTER_ENV_FILE_CONTENT" > /tmp/.env - scp /tmp/.env gitlab@pastell.master.libriciel.fr:/data/docker-file/ - ssh -tt gitlab@pastell.master.libriciel.fr "docker login -u gitlab-ci-token -p '$CI_JOB_TOKEN' $CI_REGISTRY && cd /data/docker-file/ && docker-compose pull && docker-compose up -d" - curl -i -X POST -d "$PAYLOAD" $MATTERMOST_WEBHOOK deploy_ftp: stage: staging image : "$CONTAINER_IMAGE" only: - master before_script: - rm -f /var/lib/apt/lists/ftp.debian.org_debian_dists* - apt-get -qq update && apt-get -yqq install openssh-client lftp - mkdir -p ~/.ssh - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config script: - cd /var/www/ && tar cvzf /tmp/pastell-master.tgz pastell - lftp -p 2222 -u "pastell","${RESSOURCE_LIBRICIEL_FTP_PASSWD}" "sftp://ressources.libriciel.fr/pastell" -e "put /tmp/pastell-master.tgz; bye" release: stage: release only: - tags image : "$CONTAINER_IMAGE" variables: TARBALL_NAME: pastell-${CI_COMMIT_REF_NAME}.tar.gz PAYLOAD: "payload={\"text\": \"[Pastell] Création de la version [$CI_COMMIT_REF_NAME](http://ressources.libriciel.fr/pastell/pastell-${CI_COMMIT_REF_NAME}.tar.gz)\"}" before_script: - apt-get -qq update || echo 1 - apt-get -yqq install openssh-client lftp - mkdir -p ~/.ssh - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config script: - cd /var/www/ && tar cvzf /tmp/${TARBALL_NAME} pastell - cp /tmp/${TARBALL_NAME} ${CI_PROJECT_DIR} - lftp -p 2222 -u "pastell","${RESSOURCE_LIBRICIEL_FTP_PASSWD}" "sftp://ressources.libriciel.fr/pastell" -e "put /tmp/${TARBALL_NAME}; bye" - curl -i -X POST -d "$PAYLOAD" $MATTERMOST_WEBHOOK artifacts: paths: - ${TARBALL_NAME}