Started by timer
Obtained Jenkinsfile from git https://github.com/DrPersico/postgresql.git
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /var/jenkins_home/workspace/postgres-deploy
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Declarative: Checkout SCM)
[Pipeline] checkout
Selected Git installation does not exist. Using Default
The recommended git tool is: NONE
using credential f048d47c-1ea1-4dc6-b81c-f1ec032f0d77
> git rev-parse --resolve-git-dir /var/jenkins_home/workspace/postgres-deploy/.git # timeout=10
Fetching changes from the remote Git repository
> git config remote.origin.url https://github.com/DrPersico/postgresql.git # timeout=10
Fetching upstream changes from https://github.com/DrPersico/postgresql.git
> git --version # timeout=10
> git --version # 'git version 2.47.3'
using GIT_ASKPASS to set credentials Github
> git fetch --tags --force --progress -- https://github.com/DrPersico/postgresql.git +refs/heads/*:refs/remotes/origin/* # timeout=10
> git rev-parse refs/remotes/origin/main^{commit} # timeout=10
Checking out Revision ade1f21be3ea31e81a6f387d5d2dfb8a955ff3da (refs/remotes/origin/main)
> git config core.sparsecheckout # timeout=10
> git checkout -f ade1f21be3ea31e81a6f387d5d2dfb8a955ff3da # timeout=10
Commit message: "Fix backup container restart loop - add command separators"
> git rev-list --no-walk ade1f21be3ea31e81a6f387d5d2dfb8a955ff3da # timeout=10
[Pipeline] }
[Pipeline] // stage
[Pipeline] withEnv
[Pipeline] {
[Pipeline] withEnv
[Pipeline] {
[Pipeline] timeout
Timeout set to expire in 20 min
[Pipeline] {
[Pipeline] timestamps
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Checkout)
[Pipeline] script
[Pipeline] {
[Pipeline] cleanWs
02:45:18 [2025-11-26T02:45:18.378Z] [WS-CLEANUP] Deleting project workspace...
02:45:18 [2025-11-26T02:45:18.378Z] [WS-CLEANUP] Deferred wipeout is used...
02:45:18 [2025-11-26T02:45:18.421Z] [WS-CLEANUP] done
[Pipeline] checkout
02:45:18 [2025-11-26T02:45:18.581Z] Selected Git installation does not exist. Using Default
02:45:18 [2025-11-26T02:45:18.581Z] The recommended git tool is: NONE
02:45:18 [2025-11-26T02:45:18.582Z] using credential f048d47c-1ea1-4dc6-b81c-f1ec032f0d77
02:45:18 [2025-11-26T02:45:18.601Z] Cloning the remote Git repository
02:45:18 [2025-11-26T02:45:18.602Z] Cloning repository https://github.com/DrPersico/postgresql.git
02:45:18 [2025-11-26T02:45:18.602Z] > git init /var/jenkins_home/workspace/postgres-deploy # timeout=10
02:45:18 [2025-11-26T02:45:18.642Z] Fetching upstream changes from https://github.com/DrPersico/postgresql.git
02:45:18 [2025-11-26T02:45:18.642Z] > git --version # timeout=10
02:45:18 [2025-11-26T02:45:18.655Z] > git --version # 'git version 2.47.3'
02:45:18 [2025-11-26T02:45:18.656Z] using GIT_ASKPASS to set credentials Github
02:45:18 [2025-11-26T02:45:18.676Z] > git fetch --tags --force --progress -- https://github.com/DrPersico/postgresql.git +refs/heads/*:refs/remotes/origin/* # timeout=10
02:45:20 [2025-11-26T02:45:20.058Z] > git config remote.origin.url https://github.com/DrPersico/postgresql.git # timeout=10
02:45:20 [2025-11-26T02:45:20.071Z] > git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10
02:45:20 [2025-11-26T02:45:20.097Z] Avoid second fetch
02:45:20 [2025-11-26T02:45:20.097Z] > git rev-parse refs/remotes/origin/main^{commit} # timeout=10
02:45:20 [2025-11-26T02:45:20.112Z] Checking out Revision ade1f21be3ea31e81a6f387d5d2dfb8a955ff3da (refs/remotes/origin/main)
02:45:20 [2025-11-26T02:45:20.113Z] > git config core.sparsecheckout # timeout=10
02:45:20 [2025-11-26T02:45:20.125Z] > git checkout -f ade1f21be3ea31e81a6f387d5d2dfb8a955ff3da # timeout=10
02:45:20 [2025-11-26T02:45:20.154Z] Commit message: "Fix backup container restart loop - add command separators"
[Pipeline] echo
02:45:20 [2025-11-26T02:45:20.264Z] โ
Code checked out successfully
[Pipeline] pwd
[Pipeline] echo
02:45:20 [2025-11-26T02:45:20.358Z] ๐ Working directory: /var/jenkins_home/workspace/postgres-deploy
[Pipeline] echo
02:45:20 [2025-11-26T02:45:20.440Z] ๐ฟ Git branch: null
[Pipeline] echo
02:45:20 [2025-11-26T02:45:20.480Z] ๐ท๏ธ Git commit: ade1f21be3ea31e81a6f387d5d2dfb8a955ff3da
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Validate Configuration)
[Pipeline] script
[Pipeline] {
[Pipeline] echo
02:45:23 [2025-11-26T02:45:23.038Z] ๐ Validating configuration files...
[Pipeline] fileExists
[Pipeline] echo
02:45:23 [2025-11-26T02:45:23.202Z] โ
Found: docker-compose.yml
[Pipeline] fileExists
[Pipeline] echo
02:45:23 [2025-11-26T02:45:23.364Z] โ
Found: postgresql/conf/postgresql.conf
[Pipeline] fileExists
[Pipeline] echo
02:45:23 [2025-11-26T02:45:23.530Z] โ
Found: postgresql/conf/pg_hba.conf
[Pipeline] fileExists
[Pipeline] echo
02:45:23 [2025-11-26T02:45:23.698Z] โ
Found: postgresql/init/01-init-database.sh
[Pipeline] fileExists
[Pipeline] echo
02:45:23 [2025-11-26T02:45:23.863Z] โ
Found: .env.example
[Pipeline] sh
02:45:24 [2025-11-26T02:45:24.173Z] + echo ๐ณ Validating Docker Compose files...
02:45:24 [2025-11-26T02:45:24.173Z] ๐ณ Validating Docker Compose files...
02:45:24 [2025-11-26T02:45:24.173Z] + docker-compose -f docker-compose.yml config --quiet
02:45:24 [2025-11-26T02:45:24.173Z] time="2025-11-26T02:45:24Z" level=warning msg="The \"POSTGRES_PASSWORD\" variable is not set. Defaulting to a blank string."
02:45:24 [2025-11-26T02:45:24.173Z] time="2025-11-26T02:45:24Z" level=warning msg="The \"POSTGRES_PASSWORD\" variable is not set. Defaulting to a blank string."
[Pipeline] sh
02:45:24 [2025-11-26T02:45:24.599Z] + echo ๐๏ธ Validating PostgreSQL configuration...
02:45:24 [2025-11-26T02:45:24.599Z] ๐๏ธ Validating PostgreSQL configuration...
02:45:24 [2025-11-26T02:45:24.600Z] + grep -E ^(shared_buffers|effective_cache_size|work_mem) postgresql/conf/postgresql.conf
02:45:24 [2025-11-26T02:45:24.600Z] shared_buffers = 512MB # 25% of RAM
02:45:24 [2025-11-26T02:45:24.600Z] effective_cache_size = 2GB # 50% of RAM
02:45:24 [2025-11-26T02:45:24.600Z] work_mem = 8MB # Per connection
[Pipeline] sh
02:45:24 [2025-11-26T02:45:24.939Z] + echo ๐ Checking Jenkins credentials configuration...
02:45:24 [2025-11-26T02:45:24.939Z] ๐ Checking Jenkins credentials configuration...
02:45:24 [2025-11-26T02:45:24.939Z] + echo โน๏ธ Note: Make sure you have configured these Jenkins credentials:
02:45:24 [2025-11-26T02:45:24.939Z] โน๏ธ Note: Make sure you have configured these Jenkins credentials:
02:45:24 [2025-11-26T02:45:24.939Z] + echo - postgres-password (Secret Text): Your PostgreSQL password
02:45:24 [2025-11-26T02:45:24.939Z] - postgres-password (Secret Text): Your PostgreSQL password
02:45:24 [2025-11-26T02:45:24.939Z] + echo - postgres-db (String, optional): Database name (default: postgres)
02:45:24 [2025-11-26T02:45:24.939Z] - postgres-db (String, optional): Database name (default: postgres)
02:45:24 [2025-11-26T02:45:24.940Z] + echo - postgres-user (String, optional): Database user (default: postgres)
02:45:24 [2025-11-26T02:45:24.940Z] - postgres-user (String, optional): Database user (default: postgres)
02:45:24 [2025-11-26T02:45:24.940Z] + echo ๐ Configure in: Jenkins โ Manage Jenkins โ Manage Credentials โ (global)
02:45:24 [2025-11-26T02:45:24.940Z] ๐ Configure in: Jenkins โ Manage Jenkins โ Manage Credentials โ (global)
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (System Health Check)
[Pipeline] script
[Pipeline] {
[Pipeline] echo
02:45:25 [2025-11-26T02:45:25.713Z] ๐ Checking system resources...
[Pipeline] sh
02:45:26 [2025-11-26T02:45:26.023Z] + docker info
02:45:26 [2025-11-26T02:45:26.275Z] + echo โ
Docker is running
02:45:26 [2025-11-26T02:45:26.275Z] โ
Docker is running
02:45:26 [2025-11-26T02:45:26.275Z] + echo ๐พ Memory information:
02:45:26 [2025-11-26T02:45:26.275Z] ๐พ Memory information:
02:45:26 [2025-11-26T02:45:26.275Z] + free -h
02:45:26 [2025-11-26T02:45:26.275Z] total used free shared buff/cache available
02:45:26 [2025-11-26T02:45:26.275Z] Mem: 7.6Gi 4.0Gi 248Mi 648Mi 4.4Gi 3.7Gi
02:45:26 [2025-11-26T02:45:26.275Z] Swap: 0B 0B 0B
02:45:26 [2025-11-26T02:45:26.275Z] + echo ๐ฟ Disk space:
02:45:26 [2025-11-26T02:45:26.275Z] ๐ฟ Disk space:
02:45:26 [2025-11-26T02:45:26.275Z] + df -h .
02:45:26 [2025-11-26T02:45:26.275Z] Filesystem Size Used Avail Use% Mounted on
02:45:26 [2025-11-26T02:45:26.275Z] /dev/mmcblk0p2 29G 27G 1.4G 95% /var/jenkins_home
02:45:26 [2025-11-26T02:45:26.275Z] + echo ๐ฅ๏ธ CPU information:
02:45:26 [2025-11-26T02:45:26.275Z] ๐ฅ๏ธ CPU information:
02:45:26 [2025-11-26T02:45:26.275Z] + nproc
02:45:26 [2025-11-26T02:45:26.275Z] 4
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Deploy PostgreSQL)
[Pipeline] echo
02:45:27 [2025-11-26T02:45:27.221Z] Warning, empty changelog. Have you run checkout?
[Pipeline] echo
02:45:27 [2025-11-26T02:45:27.343Z] Warning, empty changelog. Have you run checkout?
[Pipeline] echo
02:45:27 [2025-11-26T02:45:27.532Z] Warning, empty changelog. Have you run checkout?
[Pipeline] echo
02:45:27 [2025-11-26T02:45:27.632Z] Warning, empty changelog. Have you run checkout?
[Pipeline] script
[Pipeline] {
[Pipeline] echo
02:45:28 [2025-11-26T02:45:28.024Z] ๐ Deploying PostgreSQL...
[Pipeline] sh
02:45:28 [2025-11-26T02:45:28.397Z] + chmod +x postgresql/scripts/backup.sh postgresql/scripts/backup_check.sh postgresql/scripts/deploy.sh
[Pipeline] withCredentials
02:45:28 [2025-11-26T02:45:28.614Z] Masking supported pattern matches of $POSTGRES_PASSWORD or $POSTGRES_DB or $POSTGRES_USER
[Pipeline] {
[Pipeline] sh
02:45:29 [2025-11-26T02:45:29.071Z] + echo ๐ง Using Jenkins credentials for deployment...
02:45:29 [2025-11-26T02:45:29.071Z] ๐ง Using Jenkins credentials for deployment...
02:45:29 [2025-11-26T02:45:29.071Z] + export POSTGRES_DB=****
02:45:29 [2025-11-26T02:45:29.072Z] + export POSTGRES_USER=****
02:45:29 [2025-11-26T02:45:29.072Z] + export POSTGRES_PASSWORD=****
02:45:29 [2025-11-26T02:45:29.072Z] + export PROJECT_NAME=Generic PostgreSQL
02:45:29 [2025-11-26T02:45:29.072Z] + export PROJECT_SCHEMA=none
02:45:29 [2025-11-26T02:45:29.072Z] + export JENKINS_WORKSPACE=/home/geeplo/services/jenkins_home/workspace/****-deploy/****ql
02:45:29 [2025-11-26T02:45:29.072Z] + echo ๐ Deployment configuration:
02:45:29 [2025-11-26T02:45:29.072Z] ๐ Deployment configuration:
02:45:29 [2025-11-26T02:45:29.072Z] + echo Database: ****
02:45:29 [2025-11-26T02:45:29.072Z] Database: ****
02:45:29 [2025-11-26T02:45:29.072Z] + echo User: ****
02:45:29 [2025-11-26T02:45:29.072Z] User: ****
02:45:29 [2025-11-26T02:45:29.072Z] + echo Project: Generic PostgreSQL
02:45:29 [2025-11-26T02:45:29.072Z] Project: Generic PostgreSQL
02:45:29 [2025-11-26T02:45:29.072Z] + echo Schema: none
02:45:29 [2025-11-26T02:45:29.072Z] Schema: none
02:45:29 [2025-11-26T02:45:29.073Z] + echo Workspace: /home/geeplo/services/jenkins_home/workspace/****-deploy/****ql
02:45:29 [2025-11-26T02:45:29.073Z] Workspace: /home/geeplo/services/jenkins_home/workspace/****-deploy/****ql
02:45:29 [2025-11-26T02:45:29.073Z] + echo Password: [REDACTED]
02:45:29 [2025-11-26T02:45:29.073Z] Password: [REDACTED]
02:45:29 [2025-11-26T02:45:29.073Z] + docker-compose -f docker-compose.yml down
02:45:29 [2025-11-26T02:45:29.327Z] Container datashield-backup Stopping
02:45:44 [2025-11-26T02:45:44.096Z] Container datashield-backup Stopped
02:45:44 [2025-11-26T02:45:44.096Z] Container datashield-backup Removing
02:45:44 [2025-11-26T02:45:44.096Z] Container datashield-backup Removed
02:45:44 [2025-11-26T02:45:44.096Z] Container ****-**** Stopping
02:45:52 [2025-11-26T02:45:52.129Z] Container ****-**** Stopped
02:45:52 [2025-11-26T02:45:52.129Z] Container ****-**** Removing
02:45:52 [2025-11-26T02:45:52.129Z] Container ****-**** Removed
02:45:52 [2025-11-26T02:45:52.129Z] Network ****-deploy_datashield-network Removing
02:45:52 [2025-11-26T02:45:52.129Z] Network ****-deploy_datashield-network Resource is still in use
02:45:52 [2025-11-26T02:45:52.129Z] + sed s/\${POSTGRES_DB}/****/g docker-compose.yml
02:45:52 [2025-11-26T02:45:52.129Z] + sed -i s/\${POSTGRES_USER}/****/g docker-compose.tmp.yml
02:45:52 [2025-11-26T02:45:52.130Z] + sed -i s/\${POSTGRES_PASSWORD}/****/g docker-compose.tmp.yml
02:45:52 [2025-11-26T02:45:52.130Z] + sed -i s/\${PROJECT_NAME}/Generic PostgreSQL/g docker-compose.tmp.yml
02:45:52 [2025-11-26T02:45:52.130Z] + sed -i s/\${PROJECT_SCHEMA}/none/g docker-compose.tmp.yml
02:45:52 [2025-11-26T02:45:52.130Z] + sed -i s|\${JENKINS_WORKSPACE:-./****ql}|/home/geeplo/services/jenkins_home/workspace/****-deploy/****ql|g docker-compose.tmp.yml
02:45:52 [2025-11-26T02:45:52.130Z] + docker-compose -f docker-compose.tmp.yml up -d ****
02:45:52 [2025-11-26T02:45:52.130Z] Container ****-**** Creating
02:45:54 [2025-11-26T02:45:54.018Z] **** Your kernel does not support memory limit capabilities or the cgroup is not mounted. Limitation discarded.
02:45:54 [2025-11-26T02:45:54.018Z] **** Your kernel does not support memory soft limit capabilities or the cgroup is not mounted. Limitation discarded.
02:45:54 [2025-11-26T02:45:54.018Z] Container ****-**** Created
02:45:54 [2025-11-26T02:45:54.018Z] Container ****-**** Starting
02:45:59 [2025-11-26T02:45:59.219Z] Container ****-**** Started
02:45:59 [2025-11-26T02:45:59.219Z] + echo โณ Waiting for PostgreSQL to be ready...
02:45:59 [2025-11-26T02:45:59.219Z] โณ Waiting for PostgreSQL to be ready...
02:45:59 [2025-11-26T02:45:59.219Z] + docker exec ****-**** pg_isready -U **** -d ****
02:45:59 [2025-11-26T02:45:59.219Z] + echo โณ Waiting for PostgreSQL (attempt {1..60}/60)...
02:45:59 [2025-11-26T02:45:59.219Z] โณ Waiting for PostgreSQL (attempt {1..60}/60)...
02:45:59 [2025-11-26T02:45:59.219Z] + sleep 2
02:46:01 [2025-11-26T02:46:01.087Z] + docker exec ****-**** pg_isready -U **** -d ****
02:46:01 [2025-11-26T02:46:01.338Z] /var/run/****ql:5432 - accepting connections
02:46:01 [2025-11-26T02:46:01.339Z] + docker-compose -f docker-compose.tmp.yml up -d ****-backup
02:46:01 [2025-11-26T02:46:01.590Z] Container ****-**** Running
02:46:01 [2025-11-26T02:46:01.590Z] Container datashield-backup Creating
02:46:03 [2025-11-26T02:46:03.454Z] Container datashield-backup Created
02:46:03 [2025-11-26T02:46:03.454Z] Container ****-**** Waiting
02:46:04 [2025-11-26T02:46:04.367Z] Container ****-**** Healthy
02:46:04 [2025-11-26T02:46:04.367Z] Container datashield-backup Starting
02:46:04 [2025-11-26T02:46:04.920Z] Container datashield-backup Started
02:46:04 [2025-11-26T02:46:04.920Z] + rm docker-compose.tmp.yml
[Pipeline] }
[Pipeline] // withCredentials
[Pipeline] echo
02:46:05 [2025-11-26T02:46:05.203Z] โ
PostgreSQL deployed successfully
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Verify Deployment)
[Pipeline] script
[Pipeline] {
[Pipeline] echo
02:46:06 [2025-11-26T02:46:06.030Z] ๐ Verifying deployment...
[Pipeline] withCredentials
02:46:06 [2025-11-26T02:46:06.133Z] Masking supported pattern matches of $POSTGRES_PASSWORD or $POSTGRES_DB or $POSTGRES_USER
[Pipeline] {
[Pipeline] sh
02:46:07 [2025-11-26T02:46:07.979Z] + export POSTGRES_DB=****
02:46:07 [2025-11-26T02:46:07.979Z] + export POSTGRES_USER=****
02:46:07 [2025-11-26T02:46:07.979Z] + export PGPASSWORD=****
02:46:07 [2025-11-26T02:46:07.979Z] + echo ๐ณ Container status:
02:46:07 [2025-11-26T02:46:07.979Z] ๐ณ Container status:
02:46:07 [2025-11-26T02:46:07.979Z] + docker ps
02:46:07 [2025-11-26T02:46:07.979Z] + grep ****
02:46:07 [2025-11-26T02:46:07.980Z] 0ce88a4bd26a ****:18-alpine "docker-entrypoint.sโฆ" 6 seconds ago Up 3 seconds 5432/tcp datashield-backup
02:46:07 [2025-11-26T02:46:07.980Z] 902aa27cf1c7 ****:18-alpine "docker-entrypoint.sโฆ" 16 seconds ago Up 9 seconds (healthy) 0.0.0.0:5432->5432/tcp, [::]:5432->5432/tcp ****-****
02:46:07 [2025-11-26T02:46:07.980Z] + echo ๐ Testing database connection...
02:46:07 [2025-11-26T02:46:07.980Z] ๐ Testing database connection...
02:46:07 [2025-11-26T02:46:07.980Z] + docker exec -e PGPASSWORD=**** ****-**** psql -h localhost -U **** -d **** -c SELECT 1 as connection_test;
02:46:08 [2025-11-26T02:46:08.231Z] connection_test
02:46:08 [2025-11-26T02:46:08.231Z] -----------------
02:46:08 [2025-11-26T02:46:08.231Z] 1
02:46:08 [2025-11-26T02:46:08.231Z] (1 row)
02:46:08 [2025-11-26T02:46:08.231Z]
02:46:08 [2025-11-26T02:46:08.231Z] + echo ๐ Database statistics:
02:46:08 [2025-11-26T02:46:08.231Z] ๐ Database statistics:
02:46:08 [2025-11-26T02:46:08.232Z] + docker exec -e PGPASSWORD=**** ****-**** psql -h localhost -U **** -d **** -c
02:46:08 [2025-11-26T02:46:08.232Z] SELECT
02:46:08 [2025-11-26T02:46:08.232Z] 'total schemas' as check,
02:46:08 [2025-11-26T02:46:08.232Z] COUNT(*)::text as result
02:46:08 [2025-11-26T02:46:08.232Z] FROM information_schema.schemata
02:46:08 [2025-11-26T02:46:08.232Z] WHERE schema_name NOT IN ('information_schema', 'pg_catalog');
02:46:08 [2025-11-26T02:46:08.232Z]
02:46:08 [2025-11-26T02:46:08.483Z] check | result
02:46:08 [2025-11-26T02:46:08.483Z] ---------------+--------
02:46:08 [2025-11-26T02:46:08.483Z] total schemas | 2
02:46:08 [2025-11-26T02:46:08.483Z] (1 row)
02:46:08 [2025-11-26T02:46:08.483Z]
02:46:08 [2025-11-26T02:46:08.483Z] + echo ๐พ Testing backup system...
02:46:08 [2025-11-26T02:46:08.483Z] ๐พ Testing backup system...
02:46:08 [2025-11-26T02:46:08.483Z] + docker exec ****-backup /scripts/backup_check.sh
02:46:08 [2025-11-26T02:46:08.483Z] Error response from daemon: No such container: ****-backup
02:46:08 [2025-11-26T02:46:08.483Z] + echo โ ๏ธ Backup check not available (container might be starting)
02:46:08 [2025-11-26T02:46:08.483Z] โ ๏ธ Backup check not available (container might be starting)
[Pipeline] }
[Pipeline] // withCredentials
[Pipeline] echo
02:46:08 [2025-11-26T02:46:08.731Z] โ
Deployment verification completed
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Performance Test)
[Pipeline] script
[Pipeline] {
[Pipeline] echo
02:46:09 [2025-11-26T02:46:09.360Z] โก Running performance tests...
[Pipeline] withCredentials
02:46:09 [2025-11-26T02:46:09.447Z] Masking supported pattern matches of $POSTGRES_PASSWORD or $POSTGRES_DB or $POSTGRES_USER
[Pipeline] {
[Pipeline] sh
02:46:09 [2025-11-26T02:46:09.836Z] + export POSTGRES_DB=****
02:46:09 [2025-11-26T02:46:09.836Z] + export POSTGRES_USER=****
02:46:09 [2025-11-26T02:46:09.836Z] + export PGPASSWORD=****
02:46:09 [2025-11-26T02:46:09.836Z] + echo ๐ Running basic performance queries...
02:46:09 [2025-11-26T02:46:09.837Z] ๐ Running basic performance queries...
02:46:09 [2025-11-26T02:46:09.837Z] + docker exec -e PGPASSWORD=**** ****-**** psql -h localhost -U **** -d **** -c
02:46:09 [2025-11-26T02:46:09.837Z] -- Test basic query performance
02:46:09 [2025-11-26T02:46:09.837Z] EXPLAIN ANALYZE SELECT 1 as test_query;
02:46:09 [2025-11-26T02:46:09.837Z]
02:46:09 [2025-11-26T02:46:09.837Z] -- Test system catalog performance
02:46:09 [2025-11-26T02:46:09.837Z] EXPLAIN ANALYZE SELECT COUNT(*) FROM information_schema.tables;
02:46:09 [2025-11-26T02:46:09.837Z]
02:46:09 [2025-11-26T02:46:09.837Z] -- Test connection info
02:46:09 [2025-11-26T02:46:09.837Z] SELECT database_name, process_count FROM (
02:46:09 [2025-11-26T02:46:09.837Z] SELECT datname as database_name, COUNT(*) as process_count
02:46:09 [2025-11-26T02:46:09.837Z] FROM pg_stat_activity
02:46:09 [2025-11-26T02:46:09.837Z] GROUP BY datname
02:46:09 [2025-11-26T02:46:09.837Z] ) as activity_stats;
02:46:09 [2025-11-26T02:46:09.837Z]
02:46:10 [2025-11-26T02:46:10.088Z] QUERY PLAN
02:46:10 [2025-11-26T02:46:10.088Z] ---------------------------------------------------------------------------------------
02:46:10 [2025-11-26T02:46:10.089Z] Result (cost=0.00..0.01 rows=1 width=4) (actual time=0.005..0.009 rows=1.00 loops=1)
02:46:10 [2025-11-26T02:46:10.089Z] Planning:
02:46:10 [2025-11-26T02:46:10.089Z] Buffers: shared hit=3
02:46:10 [2025-11-26T02:46:10.089Z] Planning Time: 0.188 ms
02:46:10 [2025-11-26T02:46:10.089Z] Execution Time: 0.123 ms
02:46:10 [2025-11-26T02:46:10.089Z] (5 rows)
02:46:10 [2025-11-26T02:46:10.089Z]
02:46:10 [2025-11-26T02:46:10.089Z] QUERY PLAN
02:46:10 [2025-11-26T02:46:10.089Z] --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
02:46:10 [2025-11-26T02:46:10.089Z] Aggregate (cost=71.97..71.98 rows=1 width=8) (actual time=9.706..9.750 rows=1.00 loops=1)
02:46:10 [2025-11-26T02:46:10.089Z] Buffers: shared hit=28 read=12
02:46:10 [2025-11-26T02:46:10.090Z] -> Hash Left Join (cost=36.66..71.69 rows=112 width=0) (actual time=6.685..9.313 rows=215.00 loops=1)
02:46:10 [2025-11-26T02:46:10.090Z] Hash Cond: (c.reloftype = t.oid)
02:46:10 [2025-11-26T02:46:10.090Z] Buffers: shared hit=28 read=12
02:46:10 [2025-11-26T02:46:10.090Z] -> Hash Join (cost=1.09..34.58 rows=112 width=4) (actual time=0.647..2.464 rows=215.00 loops=1)
02:46:10 [2025-11-26T02:46:10.090Z] Hash Cond: (c.relnamespace = nc.oid)
02:46:10 [2025-11-26T02:46:10.090Z] Buffers: shared hit=22 read=1
02:46:10 [2025-11-26T02:46:10.090Z] -> Seq Scan on pg_class c (cost=0.00..32.67 rows=150 width=8) (actual time=0.098..1.060 rows=215.00 loops=1)
02:46:10 [2025-11-26T02:46:10.090Z] Filter: ((relkind = ANY ('{r,v,f,p}'::"char"[])) AND (pg_has_role(relowner, 'USAGE'::text) OR has_table_privilege(oid, 'SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER'::text) OR has_any_column_privilege(oid, 'SELECT, INSERT, UPDATE, REFERENCES'::text)))
02:46:10 [2025-11-26T02:46:10.090Z] Rows Removed by Filter: 202
02:46:10 [2025-11-26T02:46:10.090Z] Buffers: shared hit=13 read=1
02:46:10 [2025-11-26T02:46:10.090Z] -> Hash (cost=1.05..1.05 rows=3 width=4) (actual time=0.461..0.468 rows=4.00 loops=1)
02:46:10 [2025-11-26T02:46:10.091Z] Buckets: 1024 Batches: 1 Memory Usage: 9kB
02:46:10 [2025-11-26T02:46:10.091Z] Buffers: shared hit=9
02:46:10 [2025-11-26T02:46:10.091Z] -> Seq Scan on pg_namespace nc (cost=0.00..1.05 rows=3 width=4) (actual time=0.207..0.411 rows=4.00 loops=1)
02:46:10 [2025-11-26T02:46:10.091Z] Filter: (NOT pg_is_other_temp_schema(oid))
02:46:10 [2025-11-26T02:46:10.091Z] Buffers: shared hit=9
02:46:10 [2025-11-26T02:46:10.091Z] -> Hash (cost=27.29..27.29 rows=662 width=4) (actual time=5.963..5.980 rows=639.00 loops=1)
02:46:10 [2025-11-26T02:46:10.091Z] Buckets: 1024 Batches: 1 Memory Usage: 31kB
02:46:10 [2025-11-26T02:46:10.091Z] Buffers: shared hit=6 read=11
02:46:10 [2025-11-26T02:46:10.091Z] -> Hash Join (cost=1.09..27.29 rows=662 width=4) (actual time=0.222..4.458 rows=639.00 loops=1)
02:46:10 [2025-11-26T02:46:10.091Z] Hash Cond: (t.typnamespace = nt.oid)
02:46:10 [2025-11-26T02:46:10.091Z] Buffers: shared hit=6 read=11
02:46:10 [2025-11-26T02:46:10.091Z] -> Seq Scan on pg_type t (cost=0.00..22.62 rows=662 width=8) (actual time=0.058..1.638 rows=639.00 loops=1)
02:46:10 [2025-11-26T02:46:10.091Z] Buffers: shared hit=5 read=11
02:46:10 [2025-11-26T02:46:10.092Z] -> Hash (cost=1.04..1.04 rows=4 width=4) (actual time=0.120..0.126 rows=4.00 loops=1)
02:46:10 [2025-11-26T02:46:10.092Z] Buckets: 1024 Batches: 1 Memory Usage: 9kB
02:46:10 [2025-11-26T02:46:10.092Z] Buffers: shared hit=1
02:46:10 [2025-11-26T02:46:10.092Z] -> Seq Scan on pg_namespace nt (cost=0.00..1.04 rows=4 width=4) (actual time=0.073..0.084 rows=4.00 loops=1)
02:46:10 [2025-11-26T02:46:10.092Z] Buffers: shared hit=1
02:46:10 [2025-11-26T02:46:10.092Z] Planning:
02:46:10 [2025-11-26T02:46:10.092Z] Buffers: shared hit=332 read=14
02:46:10 [2025-11-26T02:46:10.092Z] Planning Time: 13.188 ms
02:46:10 [2025-11-26T02:46:10.092Z] Execution Time: 11.341 ms
02:46:10 [2025-11-26T02:46:10.092Z] (35 rows)
02:46:10 [2025-11-26T02:46:10.092Z]
02:46:10 [2025-11-26T02:46:10.092Z] database_name | process_count
02:46:10 [2025-11-26T02:46:10.092Z] ---------------+---------------
02:46:10 [2025-11-26T02:46:10.092Z] | 8
02:46:10 [2025-11-26T02:46:10.092Z] **** | 1
02:46:10 [2025-11-26T02:46:10.092Z] authentik | 7
02:46:10 [2025-11-26T02:46:10.092Z] (3 rows)
02:46:10 [2025-11-26T02:46:10.092Z]
[Pipeline] }
[Pipeline] // withCredentials
[Pipeline] echo
02:46:10 [2025-11-26T02:46:10.474Z] โ
Performance tests completed
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Create Backup)
[Pipeline] script
[Pipeline] {
[Pipeline] echo
02:46:11 [2025-11-26T02:46:11.135Z] ๐พ Creating deployment backup: jenkins_backup_20251126_024611.sql
[Pipeline] withCredentials
02:46:11 [2025-11-26T02:46:11.229Z] Masking supported pattern matches of $POSTGRES_PASSWORD or $POSTGRES_DB or $POSTGRES_USER
[Pipeline] {
[Pipeline] sh
02:46:11 [2025-11-26T02:46:11.362Z] Warning: A secret was passed to "sh" using Groovy String interpolation, which is insecure.
02:46:11 [2025-11-26T02:46:11.362Z] Affected argument(s) used the following variable(s): [POSTGRES_DB]
02:46:11 [2025-11-26T02:46:11.362Z] See https://jenkins.io/redirect/groovy-string-interpolation for details.
02:46:11 [2025-11-26T02:46:11.625Z] + export POSTGRES_DB=****
02:46:11 [2025-11-26T02:46:11.625Z] + export POSTGRES_USER=****
02:46:11 [2025-11-26T02:46:11.625Z] + export PGPASSWORD=****
02:46:11 [2025-11-26T02:46:11.625Z] + mkdir -p jenkins_backups
02:46:11 [2025-11-26T02:46:11.625Z] + docker exec -e PGPASSWORD=**** ****-**** pg_dump -h localhost -U **** -d **** --format=custom --compress=9 --file=/tmp/jenkins_backup_20251126_024611.sql
02:46:13 [2025-11-26T02:46:13.488Z] + docker cp ****-****:/tmp/jenkins_backup_20251126_024611.sql jenkins_backups/
02:46:13 [2025-11-26T02:46:13.488Z] + cd jenkins_backups
02:46:13 [2025-11-26T02:46:13.488Z] + sha256sum jenkins_backup_20251126_024611.sql
02:46:13 [2025-11-26T02:46:13.489Z] + echo โ
Backup created: jenkins_backup_20251126_024611.sql
02:46:13 [2025-11-26T02:46:13.489Z] โ
Backup created: jenkins_backup_20251126_024611.sql
02:46:13 [2025-11-26T02:46:13.489Z] + ls -lh jenkins_backup_20251126_024611.sql
02:46:13 [2025-11-26T02:46:13.489Z] -rw-r--r-- 1 root root 6.9K Nov 26 02:46 jenkins_backup_20251126_024611.sql
[Pipeline] }
[Pipeline] // withCredentials
[Pipeline] archiveArtifacts
02:46:13 [2025-11-26T02:46:13.914Z] Archiving artifacts
02:46:13 [2025-11-26T02:46:13.920Z] Recording fingerprints
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Declarative: Post Actions)
[Pipeline] script
[Pipeline] {
[Pipeline] echo
02:46:15 [2025-11-26T02:46:15.011Z] ๐ Pipeline completed with status: SUCCESS
[Pipeline] echo
02:46:15 [2025-11-26T02:46:15.087Z]
02:46:15 [2025-11-26T02:46:15.088Z] ๐ฏ PostgreSQL Deployment Pipeline
02:46:15 [2025-11-26T02:46:15.088Z] ๐
Build: 32
02:46:15 [2025-11-26T02:46:15.088Z] ๐ฟ Branch: null
02:46:15 [2025-11-26T02:46:15.088Z] ๐ท๏ธ Commit: ade1f21b
02:46:15 [2025-11-26T02:46:15.088Z] โฑ๏ธ Duration: 1 min 14 sec and counting
02:46:15 [2025-11-26T02:46:15.088Z] โ
Status: SUCCESS
02:46:15 [2025-11-26T02:46:15.088Z]
[Pipeline] sh
02:46:15 [2025-11-26T02:46:15.396Z] + find jenkins_backups -name *.sql -type f
02:46:15 [2025-11-26T02:46:15.396Z] + sort -r
02:46:15 [2025-11-26T02:46:15.396Z] + tail -n +6
02:46:15 [2025-11-26T02:46:15.396Z] + xargs rm -f
[Pipeline] }
[Pipeline] // script
[Pipeline] script
[Pipeline] {
[Pipeline] echo
02:46:17 [2025-11-26T02:46:17.588Z] ๐ PostgreSQL deployment successful!
[Pipeline] }
[Pipeline] // script
[Pipeline] script
[Pipeline] {
[Pipeline] echo
02:46:18 [2025-11-26T02:46:18.030Z] ๐งน Cleaning up workspace...
[Pipeline] sh
02:46:18 [2025-11-26T02:46:18.339Z] + rm -f *.tmp
[Pipeline] echo
02:46:18 [2025-11-26T02:46:18.442Z] โ
Keeping containers running for automated backups (main branch or production)
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // timestamps
[Pipeline] }
[Pipeline] // timeout
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS