* Pipeline declarativa * Debe ser el archivo 'Jenkinsfile' en la raíz * En Jenkins debe crearse el job como “pipeline” * Ejecuta el stage solo si se modifica el archivo que toca
// If referencing variables inside functions, don' use 'def' keyword // https://stackoverflow.com/a/47007544/2695864 app_docker_image = "web-acme" app_docker_version = "latest" db_docker_image = "${app_docker_image}-db" db_docker_version = "${app_docker_version}" db_siteurl_old = "localhost:8000" // TODO: change below URL once in production db_siteurl_new = "acme.example.com" pipeline { agent any environment { _DOCKER_REGISTRY_CREDENTIALS = credentials('jenkins.bot_username_password') } stages { stage('Build app') { when { changeset "wordpress/*"} steps { docker_registry_login() dir ('docker') { build_app(app_docker_version) build_app(gitlabAfter) } } } stage('Build DB') { when { changeset "docker/docker-entrypoint-initdb.d/wordpress.sql"} steps { docker_registry_login() dir ('docker') { build_db(db_docker_version) build_db(gitlabAfter) } } } } } def docker_registry_login() { sh "bash -c 'echo ${_DOCKER_REGISTRY_CREDENTIALS_PSW} | docker login ${_DOCKER_REGISTRY} --username ${_DOCKER_REGISTRY_CREDENTIALS_USR} --password-stdin'" } def build_app(version) { sh "bash -c './build-app.sh --registry ${_DOCKER_REGISTRY} --image ${app_docker_image} --version version'" } def build_db(version) { sh "bash -c './build-db.sh --registry ${_DOCKER_REGISTRY} --image ${db_docker_image} --version version --old $db_siteurl_old --new $db_siteurl_new'" }