pipeline { agent any triggers { pollSCM 'H/30 * * * *' } environment { registryCredential = 'cthulhoo_docker_hub' localRegistryCredential = 'jenkins_registry_fakecake' deploy_key = "srv.tt-rss.org" deploy_host = "tt-rss.fakecake.org" } stages { stage('checkout') { steps { dir('tt-rss') { git url: 'https://dev.tt-rss.org/tt-rss/tt-rss.git' } } } stage('phpunit') { steps { sh """ docker run --rm \ --workdir /app \ -v ${env.WORKSPACE}/tt-rss:/app \ php:8.1-cli \ php ./vendor/bin/phpunit """ } } stage('phpstan') { steps { sh """ # php -d memory_limit=-1 .... docker run --rm \ --workdir /app \ -v ${env.WORKSPACE}/tt-rss:/app \ php:8.1-cli \ php -d memory_limit=-1 ./vendor/bin/phpstan --memory-limit=2G """ } } stage('build') { environment { REPO_TIMESTAMP = sh(returnStdout: true, script: "git --git-dir 'tt-rss/.git' --no-pager log --pretty='%ct' -n1 HEAD") .trim() REPO_COMMIT = sh(returnStdout: true, script: "git --git-dir 'tt-rss/.git' --no-pager log --pretty='%h' -n1 HEAD") .trim() REPO_COMMIT_FULL = sh(returnStdout: true, script: "git --git-dir 'tt-rss/.git' --no-pager log --pretty='%H' -n1 HEAD") .trim() BUILD_TAG = sh(returnStdout: true, script: "echo \$(date -d @${REPO_TIMESTAMP} +%y.%m)-${REPO_COMMIT}") .trim() } steps { dir('src') { echo "Building for tag: ${env.BUILD_TAG}, commit: ${env.REPO_COMMIT_FULL}" dir('app') { script { def image = docker.build( "cthulhoo/ttrss-fpm-pgsql-static:${env.BUILD_TAG}", "--build-arg ORIGIN_REPO_MAIN=https://dev.tt-rss.org/tt-rss/tt-rss.git "+ "--build-arg ORIGIN_REPO_XACCEL=https://dev.tt-rss.org/tt-rss/ttrss-nginx-xaccel.git " + "--build-arg ORIGIN_COMMIT=${env.REPO_COMMIT_FULL} "+ "-f Dockerfile .") docker.withRegistry('', registryCredential) { image.push("${env.BUILD_TAG}") image.push("latest") } docker.withRegistry('https://registry.fakecake.org', localRegistryCredential) { image.push("${env.BUILD_TAG}") image.push("latest") } } } dir('web-nginx') { script { def image = docker.build("cthulhoo/ttrss-web-nginx:${env.BUILD_TAG}", "-f Dockerfile .") docker.withRegistry('', registryCredential) { image.push("${env.BUILD_TAG}") image.push("latest") } docker.withRegistry('https://registry.fakecake.org', localRegistryCredential) { image.push("${env.BUILD_TAG}") image.push("latest") } } } } } } stage('phpdoc') { steps { sh """ docker run --rm \ --workdir /app \ -v ${env.WORKSPACE}/tt-rss:/app \ phpdoc/phpdoc:3 \ -d /app/tt-rss/classes \ -d /app/tt-rss/include \ -t /app/phpdoc/out \ --cache-folder=/app/phpdoc/cache \ --visibility="public" """ sshagent(credentials: ["${deploy_key}"]) { script { sh """ rsync -e 'ssh -o StrictHostKeyChecking=no' \ -aP ${env.WORKSPACE}/tt-rss/phpdoc/out/ ${deploy_host}:phpdoc/ """ } } } } /*stage('cleanup') { steps { sh """ docker system prune -f -a """ } }*/ } post { failure { mail body: "Project: ${env.JOB_NAME}
Build Number: ${env.BUILD_NUMBER}
build URL: ${env.BUILD_URL}", charset: 'UTF-8', from: 'jenkins@fakecake.org', mimeType: 'text/html', subject: "Build failed: ${env.JOB_NAME}", to: "fox@fakecake.org"; } } }