diff --git a/Jenkinsfile b/Jenkinsfile index faa778c..fb36ea2 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,33 +1,75 @@ pipeline { agent { - node { label 'jenkins-slave' - } + } + + environment { + DOCKER_REPO = "opengnsys" + DOCKER_CREDENTIALS = credentials('docker-hub-credentials') + DOCKER_TAG = "${env.BUILD_NUMBER}" + DOCKER_IMAGE_NAME = "ogcore" + BRANCH_NAME = "${GIT_BRANCH.split("/")[1]}" + DOCKER_IDENTITY = "${DOCKER_REPO}/${DOCKER_IMAGE_NAME}-php:${BRANCH_NAME}-${DOCKER_TAG}" + DOCKER_IDENTITY_NGINX = "${DOCKER_REPO}/${DOCKER_IMAGE_NAME}-nginx:${BRANCH_NAME}-${DOCKER_TAG}" + DOCKER_COMPOSE_TEMPLATE = 'docker-compose-ci-template.yaml' + DOCKER_COMPOSE_FILE = 'docker-compose-ci-tmp.yaml' } stages { stage('Build Environmen') { steps { - //Build environment - sh 'docker compose -f docker-compose-ci.yaml up --build -d' + script { + app = docker.build("${DOCKER_IDENTITY}", '-f docker/Dockerfile-php .') + nginx = docker.build("${DOCKER_IDENTITY_NGINX}", '-f docker/Dockerfile-nginx .') + } + } + } + stage(('Prepare Docker Composer')) { + steps { + sh """ + sed 's|ogcore-php:static|${DOCKER_IDENTITY}|g; s|ogcore-nginx:static|${DOCKER_IDENTITY_NGINX}|g' ${DOCKER_COMPOSE_TEMPLATE} > ${DOCKER_COMPOSE_FILE} + """ + } + } + + stage('Run containers') { + steps { + sh """ + docker compose -f ${DOCKER_COMPOSE_FILE} up -d + """ } } stage('Install dependencies') { steps { // Install dependencies - sh 'docker exec ogcore-php composer install' - sh 'docker exec ogcore-php php bin/console lexik:jwt:generate-keypair --overwrite' - sh 'docker exec ogcore-php php bin/console doctrine:migrations:migrate --no-interaction' - sh 'docker exec ogcore-php php bin/console doctrine:fixtures:load --no-interaction' + sh """ + docker compose exec php composer install + docker compose exec php php bin/console lexik:jwt:generate-keypair --overwrite + docker compose exec php php bin/console doctrine:migrations:migrate --no-interaction + docker compose exec php php bin/console doctrine:fixtures:load --no-interaction // Create report directory - sh 'docker exec ogcore-php mkdir -p /report' + docker compose exec php mkdir -p /report + """ } } + stage('Tests') { steps { // Run tests - sh 'docker compose exec php bin/phpunit --log-junit /report/phpunit.xml' - sh 'docker cp ogcore-php:/report/phpunit.xml .' + sh """ + docker compose exec php bin/phpunit --log-junit /report/phpunit.xml + docker compose cp php:/report/phpunit.xml ./phpunit.xml + """ + } + post { + sucess { + script { + docker.withRegistry('https://index.docker.io/v1/', "${DOCKER_CREDENTIALS}") { + app.push() + nginx.push() + } + } + } } } } diff --git a/docker-compose-ci-template.yaml b/docker-compose-ci-template.yaml new file mode 100644 index 0000000..b407aa8 --- /dev/null +++ b/docker-compose-ci-template.yaml @@ -0,0 +1,51 @@ +services: + database: + container_name: ogcore-database + image: mariadb:10.11 + environment: + MYSQL_ROOT_PASSWORD: root + MYSQL_DATABASE: ogcore + MYSQL_PASSWORD: root + MYSQL_USER: admin + ports: + - 3336:3306 + volumes: + - database_data:/var/lib/mysql + networks: + - ogcore-network + + nginx: + container_name: ogcore-nginx + build: + context: . + dockerfile: ./docker/Dockerfile-nginx + depends_on: + - php + ports: + - 8080:80 + volumes: + - ./public:/var/www/html/public:cached + networks: + - ogcore-network + image: ogcore-nginx:static + + php: + container_name: ogcore-php + build: + context: . + dockerfile: ./docker/Dockerfile-jenkins-php + depends_on: + - database + environment: + XDEBUG_CLIENT_HOST: 127.17.0.1 + XDEBUG_CLIENT_PORT: 9003 + PHP_IDE_CONFIG: serverName=ogcore + networks: + - ogcore-network + image: ogcore-php:static + +volumes: + database_data: + +networks: + ogcore-network: