From ac9c20e8d2f5a558b412ffcd31e81299e0d990bd Mon Sep 17 00:00:00 2001 From: Jakob Ackermann Date: Fri, 8 Aug 2025 17:03:48 +0200 Subject: [PATCH] [monorepo] tweaks for Jenkins/CI (#27761) * [packer] jenkins-worker: install htop and lsof * [web] trim tailing space in Jenkinsfile * [web] cleanup after finishing Jenkins pipeline * [server-ce] test: cleanup after finishing Jenkins pipeline * [saas-e2e] add timeout to waiting for rail/web startup * [monorepo] add 60s timeout for waiting on mongo to startup * [saas-e2e] cleanup after finishing Jenkins pipeline GitOrigin-RevId: 9954ab17b4db6a95c444e8e0b55cebb8d5daae59 --- server-ce/test/Jenkinsfile | 7 ++ server-ce/test/Makefile | 18 ++++- services/chat/docker-compose.ci.yml | 2 +- services/chat/docker-compose.yml | 2 +- services/contacts/docker-compose.ci.yml | 2 +- services/contacts/docker-compose.yml | 2 +- services/docstore/docker-compose.ci.yml | 2 +- services/docstore/docker-compose.yml | 2 +- .../document-updater/docker-compose.ci.yml | 2 +- services/document-updater/docker-compose.yml | 2 +- services/history-v1/docker-compose.ci.yml | 2 +- services/history-v1/docker-compose.yml | 2 +- services/notifications/docker-compose.ci.yml | 2 +- services/notifications/docker-compose.yml | 2 +- .../project-history/docker-compose.ci.yml | 2 +- services/project-history/docker-compose.yml | 2 +- services/web/Jenkinsfile | 67 +++++++++---------- services/web/docker-compose.ci.yml | 4 +- services/web/docker-compose.yml | 4 +- 19 files changed, 73 insertions(+), 55 deletions(-) diff --git a/server-ce/test/Jenkinsfile b/server-ce/test/Jenkinsfile index 38d8b4d1d7..6c7829c7fb 100644 --- a/server-ce/test/Jenkinsfile +++ b/server-ce/test/Jenkinsfile @@ -218,6 +218,13 @@ pipeline { } } } + post { + cleanup { + dir('server-ce/test') { + sh 'make clean' + } + } + } } // vim: set ft=groovy : diff --git a/server-ce/test/Makefile b/server-ce/test/Makefile index f580ba5f69..efaa584b20 100644 --- a/server-ce/test/Makefile +++ b/server-ce/test/Makefile @@ -32,8 +32,22 @@ test-e2e-open: docker compose up --detach --wait mongo || (docker compose logs mongo && exit 42) docker compose up --no-log-prefix --exit-code-from=e2e-open e2e-open host-admin || (docker compose logs mongo && exit 42) -clean: - docker compose down --volumes --timeout 0 +SHARD_PROJECT_NAMES = \ + test-ce-default \ + test-ce-custom-1 \ + test-pro-default-1 \ + test-pro-default-2 \ + test-pro-custom-1 \ + test-pro-custom-2 \ + test-pro-custom-3 \ + test-pro-custom-4 +CLEAN_SHARDS=$(addprefix clean/,$(SHARD_PROJECT_NAMES)) +clean: $(CLEAN_SHARDS) + -docker compose run --no-deps --rm --entrypoint rm host-admin -rf docker-compose.override.yml docker-compose.*_*.yml data/ + -docker compose down --volumes --timeout 0 + +$(CLEAN_SHARDS): clean/%: + -COMPOSE_PROJECT_NAME=$* docker compose down --timeout=0 --volumes prefetch: prefetch_default prefetch_default: prefetch_default_compose diff --git a/services/chat/docker-compose.ci.yml b/services/chat/docker-compose.ci.yml index ac74fafa36..5ddc228dd1 100644 --- a/services/chat/docker-compose.ci.yml +++ b/services/chat/docker-compose.ci.yml @@ -28,7 +28,7 @@ services: mongo: condition: service_started user: node - entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=0 -- + entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=60 -- command: npm run test:acceptance diff --git a/services/chat/docker-compose.yml b/services/chat/docker-compose.yml index 3dcdcf42d4..a1a78d7e23 100644 --- a/services/chat/docker-compose.yml +++ b/services/chat/docker-compose.yml @@ -38,7 +38,7 @@ services: depends_on: mongo: condition: service_started - entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=0 -- + entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=60 -- command: npm run --silent test:acceptance mongo: diff --git a/services/contacts/docker-compose.ci.yml b/services/contacts/docker-compose.ci.yml index ac74fafa36..5ddc228dd1 100644 --- a/services/contacts/docker-compose.ci.yml +++ b/services/contacts/docker-compose.ci.yml @@ -28,7 +28,7 @@ services: mongo: condition: service_started user: node - entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=0 -- + entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=60 -- command: npm run test:acceptance diff --git a/services/contacts/docker-compose.yml b/services/contacts/docker-compose.yml index f964f7cbf8..082b89f173 100644 --- a/services/contacts/docker-compose.yml +++ b/services/contacts/docker-compose.yml @@ -38,7 +38,7 @@ services: depends_on: mongo: condition: service_started - entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=0 -- + entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=60 -- command: npm run --silent test:acceptance mongo: diff --git a/services/docstore/docker-compose.ci.yml b/services/docstore/docker-compose.ci.yml index 4854bf7b65..ac0af69e40 100644 --- a/services/docstore/docker-compose.ci.yml +++ b/services/docstore/docker-compose.ci.yml @@ -33,7 +33,7 @@ services: gcs: condition: service_healthy user: node - entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=0 -- + entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=60 -- command: npm run test:acceptance diff --git a/services/docstore/docker-compose.yml b/services/docstore/docker-compose.yml index 3ee81b01fe..686f6b1205 100644 --- a/services/docstore/docker-compose.yml +++ b/services/docstore/docker-compose.yml @@ -43,7 +43,7 @@ services: condition: service_started gcs: condition: service_healthy - entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=0 -- + entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=60 -- command: npm run --silent test:acceptance mongo: diff --git a/services/document-updater/docker-compose.ci.yml b/services/document-updater/docker-compose.ci.yml index d0b4836a46..d8e47a7e4b 100644 --- a/services/document-updater/docker-compose.ci.yml +++ b/services/document-updater/docker-compose.ci.yml @@ -34,7 +34,7 @@ services: redis: condition: service_healthy user: node - entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=0 -- + entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=60 -- command: npm run test:acceptance diff --git a/services/document-updater/docker-compose.yml b/services/document-updater/docker-compose.yml index b4023cbc84..db410fb021 100644 --- a/services/document-updater/docker-compose.yml +++ b/services/document-updater/docker-compose.yml @@ -44,7 +44,7 @@ services: condition: service_started redis: condition: service_healthy - entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=0 -- + entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=60 -- command: npm run --silent test:acceptance redis: diff --git a/services/history-v1/docker-compose.ci.yml b/services/history-v1/docker-compose.ci.yml index 51f30a0bcc..cbdc76239b 100644 --- a/services/history-v1/docker-compose.ci.yml +++ b/services/history-v1/docker-compose.ci.yml @@ -57,7 +57,7 @@ services: gcs: condition: service_healthy user: node - entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=0 -- + entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=60 -- command: npm run test:acceptance diff --git a/services/history-v1/docker-compose.yml b/services/history-v1/docker-compose.yml index 840d56b15a..669894a5d6 100644 --- a/services/history-v1/docker-compose.yml +++ b/services/history-v1/docker-compose.yml @@ -73,7 +73,7 @@ services: condition: service_completed_successfully gcs: condition: service_healthy - entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=0 -- + entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=60 -- command: npm run --silent test:acceptance redis: diff --git a/services/notifications/docker-compose.ci.yml b/services/notifications/docker-compose.ci.yml index ac74fafa36..5ddc228dd1 100644 --- a/services/notifications/docker-compose.ci.yml +++ b/services/notifications/docker-compose.ci.yml @@ -28,7 +28,7 @@ services: mongo: condition: service_started user: node - entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=0 -- + entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=60 -- command: npm run test:acceptance diff --git a/services/notifications/docker-compose.yml b/services/notifications/docker-compose.yml index 35dc0108d6..8495f07820 100644 --- a/services/notifications/docker-compose.yml +++ b/services/notifications/docker-compose.yml @@ -38,7 +38,7 @@ services: depends_on: mongo: condition: service_started - entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=0 -- + entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=60 -- command: npm run --silent test:acceptance mongo: diff --git a/services/project-history/docker-compose.ci.yml b/services/project-history/docker-compose.ci.yml index d0b4836a46..d8e47a7e4b 100644 --- a/services/project-history/docker-compose.ci.yml +++ b/services/project-history/docker-compose.ci.yml @@ -34,7 +34,7 @@ services: redis: condition: service_healthy user: node - entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=0 -- + entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=60 -- command: npm run test:acceptance diff --git a/services/project-history/docker-compose.yml b/services/project-history/docker-compose.yml index 673e7193b6..0717585bb8 100644 --- a/services/project-history/docker-compose.yml +++ b/services/project-history/docker-compose.yml @@ -44,7 +44,7 @@ services: condition: service_started redis: condition: service_healthy - entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=0 -- + entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=60 -- command: npm run --silent test:acceptance redis: diff --git a/services/web/Jenkinsfile b/services/web/Jenkinsfile index e3285d83eb..f66bda1117 100644 --- a/services/web/Jenkinsfile +++ b/services/web/Jenkinsfile @@ -68,7 +68,7 @@ pipeline { stage('Build Deps') { steps { script { - waitUntil { + waitUntil { return action_pull_cache } } @@ -83,7 +83,7 @@ pipeline { stage('Push Deps') { steps { script { - waitUntil { + waitUntil { return action_build_deps } } @@ -95,7 +95,7 @@ pipeline { stage('Build Dev') { steps { script { - waitUntil { + waitUntil { return action_build_deps && action_copy_external_pages } } @@ -110,7 +110,7 @@ pipeline { stage ('Format') { steps { script { - waitUntil { + waitUntil { return action_build_dev } } @@ -122,7 +122,7 @@ pipeline { stage('Lint') { steps { script { - waitUntil { + waitUntil { return action_build_dev } } @@ -141,7 +141,7 @@ pipeline { stage('Acceptance SaaS') { steps { script { - waitUntil { + waitUntil { return action_build_dev } } @@ -156,7 +156,7 @@ pipeline { stage('Acceptance Server CE') { steps { script { - waitUntil { + waitUntil { return action_build_dev } } @@ -168,10 +168,10 @@ pipeline { stage('Acceptance Server Pro') { steps { script { - waitUntil { + waitUntil { return action_build_dev } - } + } dir('services/web') { sh "make test_acceptance_app_server_pro" } @@ -183,7 +183,7 @@ pipeline { stage('test_acceptance_modules_merged_saas_1') { steps { script { - waitUntil { + waitUntil { return action_build_dev } } @@ -195,7 +195,7 @@ pipeline { stage('test_acceptance_modules_merged_saas_2') { steps { script { - waitUntil { + waitUntil { return action_build_dev } } @@ -207,7 +207,7 @@ pipeline { stage('test_acceptance_modules_merged_saas_3') { steps { script { - waitUntil { + waitUntil { return action_build_dev } } @@ -219,7 +219,7 @@ pipeline { stage('test_acceptance_modules_merged_saas_4') { steps { script { - waitUntil { + waitUntil { return action_build_dev } } @@ -231,7 +231,7 @@ pipeline { stage('test_acceptance_modules_merged_server_ce') { steps { script { - waitUntil { + waitUntil { return action_build_dev } } @@ -243,7 +243,7 @@ pipeline { stage('test_acceptance_modules_merged_server_pro') { steps { script { - waitUntil { + waitUntil { return action_build_dev } } @@ -255,7 +255,7 @@ pipeline { stage('test_frontend') { steps { script { - waitUntil { + waitUntil { return action_build_dev } } @@ -267,7 +267,7 @@ pipeline { stage('test_frontend_ct_build') { steps { script { - waitUntil { + waitUntil { return action_build_dev } } @@ -375,7 +375,7 @@ pipeline { stage('Build Webpack'){ steps { script { - waitUntil { + waitUntil { return action_build_dev && action_test_acceptance_app_server_pro } } @@ -390,7 +390,7 @@ pipeline { stage('Build Pug') { steps { script { - waitUntil { + waitUntil { return action_build_dev && action_test_acceptance_app_server_pro } } @@ -405,9 +405,9 @@ pipeline { stage('CDN Upload Image') { steps { script { - waitUntil { + waitUntil { return action_build_webpack - } + } } dir('services/web') { sh 'make tar' @@ -437,14 +437,14 @@ pipeline { return action_build_webpack & action_build_production } } - dir('services/web') { + dir('services/web') { sh 'gcloud secrets versions access latest --secret=web-sentryclirc > .sentryclirc' } script { action_fetch_sentry_secret = true } } - } + } stage('Sentry Upload') { agent { docker { @@ -459,7 +459,7 @@ pipeline { return action_fetch_sentry_secret } } - dir('services/web') { + dir('services/web') { sh 'bin/sentry_upload' } } @@ -474,16 +474,13 @@ pipeline { } } } -} - - - - - + post { + cleanup { + dir('services/web') { + sh 'make clean' + } + } + } +} // vim: set ft=groovy : - - - - - diff --git a/services/web/docker-compose.ci.yml b/services/web/docker-compose.ci.yml index 891eaa0571..7d7ed315b7 100644 --- a/services/web/docker-compose.ci.yml +++ b/services/web/docker-compose.ci.yml @@ -13,7 +13,7 @@ services: user: node volumes: - ../../bin/shared/wait_for_it:/overleaf/bin/shared/wait_for_it - entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=0 -- + entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=60 -- command: npm run test:unit:app working_dir: /overleaf/services/web env_file: docker-compose.common.env @@ -42,7 +42,7 @@ services: - 'www.overleaf.test:127.0.0.1' volumes: - ../../bin/shared/wait_for_it:/overleaf/bin/shared/wait_for_it - entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=0 -- + entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=60 -- command: npm run test:acceptance:app user: root depends_on: diff --git a/services/web/docker-compose.yml b/services/web/docker-compose.yml index 6684fd8b40..5b74ff969d 100644 --- a/services/web/docker-compose.yml +++ b/services/web/docker-compose.yml @@ -19,7 +19,7 @@ services: LOG_LEVEL: ${LOG_LEVEL:-} NODE_ENV: test NODE_OPTIONS: "--unhandled-rejections=strict" - entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=0 -- + entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=60 -- command: npm run --silent test:unit:app user: node depends_on: @@ -51,7 +51,7 @@ services: - mongo - saml - ldap - entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=0 -- + entrypoint: /overleaf/bin/shared/wait_for_it mongo:27017 --timeout=60 -- command: npm run --silent test:acceptance:app test_frontend: