Skip to content
Success

Console Output

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:16 [2025-11-25T02:45:16.850Z] [WS-CLEANUP] Deleting project workspace...
02:45:16 [2025-11-25T02:45:16.851Z] [WS-CLEANUP] Deferred wipeout is used...
02:45:16 [2025-11-25T02:45:16.892Z] [WS-CLEANUP] done
[Pipeline] checkout
02:45:17 [2025-11-25T02:45:17.248Z] Selected Git installation does not exist. Using Default
02:45:17 [2025-11-25T02:45:17.249Z] The recommended git tool is: NONE
02:45:17 [2025-11-25T02:45:17.249Z] using credential f048d47c-1ea1-4dc6-b81c-f1ec032f0d77
02:45:17 [2025-11-25T02:45:17.327Z] Cloning the remote Git repository
02:45:17 [2025-11-25T02:45:17.327Z] Cloning repository https://github.com/DrPersico/postgresql.git
02:45:17 [2025-11-25T02:45:17.327Z]  > git init /var/jenkins_home/workspace/postgres-deploy # timeout=10
02:45:17 [2025-11-25T02:45:17.391Z] Fetching upstream changes from https://github.com/DrPersico/postgresql.git
02:45:17 [2025-11-25T02:45:17.391Z]  > git --version # timeout=10
02:45:17 [2025-11-25T02:45:17.404Z]  > git --version # 'git version 2.47.3'
02:45:17 [2025-11-25T02:45:17.405Z] using GIT_ASKPASS to set credentials Github
02:45:17 [2025-11-25T02:45:17.445Z]  > git fetch --tags --force --progress -- https://github.com/DrPersico/postgresql.git +refs/heads/*:refs/remotes/origin/* # timeout=10
02:45:18 [2025-11-25T02:45:18.703Z]  > git config remote.origin.url https://github.com/DrPersico/postgresql.git # timeout=10
02:45:18 [2025-11-25T02:45:18.714Z]  > git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10
02:45:18 [2025-11-25T02:45:18.763Z] Avoid second fetch
02:45:18 [2025-11-25T02:45:18.764Z]  > git rev-parse refs/remotes/origin/main^{commit} # timeout=10
02:45:18 [2025-11-25T02:45:18.776Z] Checking out Revision ade1f21be3ea31e81a6f387d5d2dfb8a955ff3da (refs/remotes/origin/main)
02:45:18 [2025-11-25T02:45:18.776Z]  > git config core.sparsecheckout # timeout=10
02:45:18 [2025-11-25T02:45:18.787Z]  > git checkout -f ade1f21be3ea31e81a6f387d5d2dfb8a955ff3da # timeout=10
02:45:18 [2025-11-25T02:45:18.818Z] Commit message: "Fix backup container restart loop - add command separators"
[Pipeline] echo
02:45:19 [2025-11-25T02:45:19.004Z] โœ… Code checked out successfully
[Pipeline] pwd
[Pipeline] echo
02:45:19 [2025-11-25T02:45:19.139Z] ๐Ÿ“‚ Working directory: /var/jenkins_home/workspace/postgres-deploy
[Pipeline] echo
02:45:19 [2025-11-25T02:45:19.290Z] ๐ŸŒฟ Git branch: null
[Pipeline] echo
02:45:19 [2025-11-25T02:45:19.373Z] ๐Ÿท๏ธ  Git commit: ade1f21be3ea31e81a6f387d5d2dfb8a955ff3da
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Validate Configuration)
[Pipeline] script
[Pipeline] {
[Pipeline] echo
02:45:21 [2025-11-25T02:45:21.860Z] ๐Ÿ” Validating configuration files...
[Pipeline] fileExists
[Pipeline] echo
02:45:22 [2025-11-25T02:45:22.254Z] โœ… Found: docker-compose.yml
[Pipeline] fileExists
[Pipeline] echo
02:45:22 [2025-11-25T02:45:22.570Z] โœ… Found: postgresql/conf/postgresql.conf
[Pipeline] fileExists
[Pipeline] echo
02:45:22 [2025-11-25T02:45:22.848Z] โœ… Found: postgresql/conf/pg_hba.conf
[Pipeline] fileExists
[Pipeline] echo
02:45:23 [2025-11-25T02:45:23.282Z] โœ… Found: postgresql/init/01-init-database.sh
[Pipeline] fileExists
[Pipeline] echo
02:45:23 [2025-11-25T02:45:23.637Z] โœ… Found: .env.example
[Pipeline] sh
02:45:23 [2025-11-25T02:45:23.983Z] + echo ๐Ÿณ Validating Docker Compose files...
02:45:23 [2025-11-25T02:45:23.983Z] ๐Ÿณ Validating Docker Compose files...
02:45:23 [2025-11-25T02:45:23.984Z] + docker-compose -f docker-compose.yml config --quiet
02:45:23 [2025-11-25T02:45:23.984Z] time="2025-11-25T02:45:23Z" level=warning msg="The \"POSTGRES_PASSWORD\" variable is not set. Defaulting to a blank string."
02:45:23 [2025-11-25T02:45:23.984Z] time="2025-11-25T02:45:23Z" level=warning msg="The \"POSTGRES_PASSWORD\" variable is not set. Defaulting to a blank string."
[Pipeline] sh
02:45:24 [2025-11-25T02:45:24.422Z] + echo ๐Ÿ—„๏ธ  Validating PostgreSQL configuration...
02:45:24 [2025-11-25T02:45:24.422Z] ๐Ÿ—„๏ธ  Validating PostgreSQL configuration...
02:45:24 [2025-11-25T02:45:24.422Z] + grep -E ^(shared_buffers|effective_cache_size|work_mem) postgresql/conf/postgresql.conf
02:45:24 [2025-11-25T02:45:24.422Z] shared_buffers = 512MB          # 25% of RAM
02:45:24 [2025-11-25T02:45:24.422Z] effective_cache_size = 2GB      # 50% of RAM
02:45:24 [2025-11-25T02:45:24.422Z] work_mem = 8MB                  # Per connection
[Pipeline] sh
02:45:25 [2025-11-25T02:45:25.368Z] + echo ๐Ÿ” Checking Jenkins credentials configuration...
02:45:25 [2025-11-25T02:45:25.368Z] ๐Ÿ” Checking Jenkins credentials configuration...
02:45:25 [2025-11-25T02:45:25.369Z] + echo โ„น๏ธ  Note: Make sure you have configured these Jenkins credentials:
02:45:25 [2025-11-25T02:45:25.369Z] โ„น๏ธ  Note: Make sure you have configured these Jenkins credentials:
02:45:25 [2025-11-25T02:45:25.369Z] + echo    - postgres-password (Secret Text): Your PostgreSQL password
02:45:25 [2025-11-25T02:45:25.369Z]    - postgres-password (Secret Text): Your PostgreSQL password
02:45:25 [2025-11-25T02:45:25.369Z] + echo    - postgres-db (String, optional): Database name (default: postgres)
02:45:25 [2025-11-25T02:45:25.369Z]    - postgres-db (String, optional): Database name (default: postgres)
02:45:25 [2025-11-25T02:45:25.369Z] + echo    - postgres-user (String, optional): Database user (default: postgres)
02:45:25 [2025-11-25T02:45:25.369Z]    - postgres-user (String, optional): Database user (default: postgres)
02:45:25 [2025-11-25T02:45:25.369Z] + echo ๐Ÿ“ Configure in: Jenkins โ†’ Manage Jenkins โ†’ Manage Credentials โ†’ (global)
02:45:25 [2025-11-25T02:45:25.369Z] ๐Ÿ“ 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:26 [2025-11-25T02:45:26.246Z] ๐Ÿ” Checking system resources...
[Pipeline] sh
02:45:26 [2025-11-25T02:45:26.547Z] + docker info
02:45:26 [2025-11-25T02:45:26.800Z] + echo โœ… Docker is running
02:45:26 [2025-11-25T02:45:26.800Z] โœ… Docker is running
02:45:26 [2025-11-25T02:45:26.800Z] + echo ๐Ÿ’พ Memory information:
02:45:26 [2025-11-25T02:45:26.800Z] ๐Ÿ’พ Memory information:
02:45:26 [2025-11-25T02:45:26.800Z] + free -h
02:45:26 [2025-11-25T02:45:26.800Z]                total        used        free      shared  buff/cache   available
02:45:26 [2025-11-25T02:45:26.800Z] Mem:           7.6Gi       4.0Gi       225Mi       648Mi       4.4Gi       3.7Gi
02:45:26 [2025-11-25T02:45:26.800Z] Swap:             0B          0B          0B
02:45:26 [2025-11-25T02:45:26.800Z] + echo ๐Ÿ’ฟ Disk space:
02:45:26 [2025-11-25T02:45:26.800Z] ๐Ÿ’ฟ Disk space:
02:45:26 [2025-11-25T02:45:26.800Z] + df -h .
02:45:26 [2025-11-25T02:45:26.800Z] Filesystem      Size  Used Avail Use% Mounted on
02:45:26 [2025-11-25T02:45:26.800Z] /dev/mmcblk0p2   29G   27G  1.5G  95% /var/jenkins_home
02:45:26 [2025-11-25T02:45:26.800Z] + echo ๐Ÿ–ฅ๏ธ  CPU information:
02:45:26 [2025-11-25T02:45:26.800Z] ๐Ÿ–ฅ๏ธ  CPU information:
02:45:26 [2025-11-25T02:45:26.800Z] + nproc
02:45:26 [2025-11-25T02:45:26.800Z] 4
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Deploy PostgreSQL)
[Pipeline] echo
02:45:29 [2025-11-25T02:45:29.944Z] Warning, empty changelog. Have you run checkout?
[Pipeline] echo
02:45:30 [2025-11-25T02:45:30.103Z] Warning, empty changelog. Have you run checkout?
[Pipeline] echo
02:45:30 [2025-11-25T02:45:30.327Z] Warning, empty changelog. Have you run checkout?
[Pipeline] echo
02:45:30 [2025-11-25T02:45:30.435Z] Warning, empty changelog. Have you run checkout?
[Pipeline] script
[Pipeline] {
[Pipeline] echo
02:45:30 [2025-11-25T02:45:30.836Z] ๐Ÿš€ Deploying PostgreSQL...
[Pipeline] sh
02:45:31 [2025-11-25T02:45:31.167Z] + chmod +x postgresql/scripts/backup.sh postgresql/scripts/backup_check.sh postgresql/scripts/deploy.sh
[Pipeline] withCredentials
02:45:31 [2025-11-25T02:45:31.590Z] Masking supported pattern matches of $POSTGRES_PASSWORD or $POSTGRES_DB or $POSTGRES_USER
[Pipeline] {
[Pipeline] sh
02:45:31 [2025-11-25T02:45:31.993Z] + echo ๐Ÿ”ง Using Jenkins credentials for deployment...
02:45:31 [2025-11-25T02:45:31.993Z] ๐Ÿ”ง Using Jenkins credentials for deployment...
02:45:31 [2025-11-25T02:45:31.993Z] + export POSTGRES_DB=****
02:45:31 [2025-11-25T02:45:31.994Z] + export POSTGRES_USER=****
02:45:31 [2025-11-25T02:45:31.994Z] + export POSTGRES_PASSWORD=****
02:45:31 [2025-11-25T02:45:31.994Z] + export PROJECT_NAME=Generic PostgreSQL
02:45:31 [2025-11-25T02:45:31.994Z] + export PROJECT_SCHEMA=none
02:45:31 [2025-11-25T02:45:31.994Z] + export JENKINS_WORKSPACE=/home/geeplo/services/jenkins_home/workspace/****-deploy/****ql
02:45:31 [2025-11-25T02:45:31.994Z] + echo ๐Ÿ“‹ Deployment configuration:
02:45:31 [2025-11-25T02:45:31.994Z] ๐Ÿ“‹ Deployment configuration:
02:45:31 [2025-11-25T02:45:31.994Z] + echo    Database: ****
02:45:31 [2025-11-25T02:45:31.994Z]    Database: ****
02:45:31 [2025-11-25T02:45:31.994Z] + echo    User: ****
02:45:31 [2025-11-25T02:45:31.994Z]    User: ****
02:45:31 [2025-11-25T02:45:31.994Z] + echo    Project: Generic PostgreSQL
02:45:31 [2025-11-25T02:45:31.994Z]    Project: Generic PostgreSQL
02:45:31 [2025-11-25T02:45:31.995Z] + echo    Schema: none
02:45:31 [2025-11-25T02:45:31.995Z]    Schema: none
02:45:31 [2025-11-25T02:45:31.995Z] + echo    Workspace: /home/geeplo/services/jenkins_home/workspace/****-deploy/****ql
02:45:31 [2025-11-25T02:45:31.995Z]    Workspace: /home/geeplo/services/jenkins_home/workspace/****-deploy/****ql
02:45:31 [2025-11-25T02:45:31.995Z] + echo    Password: [REDACTED]
02:45:31 [2025-11-25T02:45:31.995Z]    Password: [REDACTED]
02:45:31 [2025-11-25T02:45:31.995Z] + docker-compose -f docker-compose.yml down
02:45:31 [2025-11-25T02:45:31.995Z]  Container datashield-backup  Stopping
02:45:46 [2025-11-25T02:45:46.766Z]  Container datashield-backup  Stopped
02:45:46 [2025-11-25T02:45:46.766Z]  Container datashield-backup  Removing
02:45:46 [2025-11-25T02:45:46.766Z]  Container datashield-backup  Removed
02:45:46 [2025-11-25T02:45:46.766Z]  Container ****-****  Stopping
02:45:50 [2025-11-25T02:45:50.110Z]  Container ****-****  Stopped
02:45:50 [2025-11-25T02:45:50.110Z]  Container ****-****  Removing
02:45:50 [2025-11-25T02:45:50.110Z]  Container ****-****  Removed
02:45:50 [2025-11-25T02:45:50.110Z]  Network ****-deploy_datashield-network  Removing
02:45:50 [2025-11-25T02:45:50.110Z]  Network ****-deploy_datashield-network  Resource is still in use
02:45:50 [2025-11-25T02:45:50.110Z] + sed s/\${POSTGRES_DB}/****/g docker-compose.yml
02:45:50 [2025-11-25T02:45:50.110Z] + sed -i s/\${POSTGRES_USER}/****/g docker-compose.tmp.yml
02:45:50 [2025-11-25T02:45:50.111Z] + sed -i s/\${POSTGRES_PASSWORD}/****/g docker-compose.tmp.yml
02:45:50 [2025-11-25T02:45:50.111Z] + sed -i s/\${PROJECT_NAME}/Generic PostgreSQL/g docker-compose.tmp.yml
02:45:50 [2025-11-25T02:45:50.111Z] + sed -i s/\${PROJECT_SCHEMA}/none/g docker-compose.tmp.yml
02:45:50 [2025-11-25T02:45:50.111Z] + sed -i s|\${JENKINS_WORKSPACE:-./****ql}|/home/geeplo/services/jenkins_home/workspace/****-deploy/****ql|g docker-compose.tmp.yml
02:45:50 [2025-11-25T02:45:50.112Z] + docker-compose -f docker-compose.tmp.yml up -d ****
02:45:50 [2025-11-25T02:45:50.112Z]  Container ****-****  Creating
02:45:51 [2025-11-25T02:45:51.978Z]  **** Your kernel does not support memory limit capabilities or the cgroup is not mounted. Limitation discarded. 
02:45:51 [2025-11-25T02:45:51.979Z]  **** Your kernel does not support memory soft limit capabilities or the cgroup is not mounted. Limitation discarded. 
02:45:51 [2025-11-25T02:45:51.979Z]  Container ****-****  Created
02:45:51 [2025-11-25T02:45:51.979Z]  Container ****-****  Starting
02:45:52 [2025-11-25T02:45:52.893Z]  Container ****-****  Started
02:45:52 [2025-11-25T02:45:52.893Z] + echo โณ Waiting for PostgreSQL to be ready...
02:45:52 [2025-11-25T02:45:52.894Z] โณ Waiting for PostgreSQL to be ready...
02:45:52 [2025-11-25T02:45:52.894Z] + docker exec ****-**** pg_isready -U **** -d ****
02:45:53 [2025-11-25T02:45:53.146Z] + echo โณ Waiting for PostgreSQL (attempt {1..60}/60)...
02:45:53 [2025-11-25T02:45:53.147Z] โณ Waiting for PostgreSQL (attempt {1..60}/60)...
02:45:53 [2025-11-25T02:45:53.147Z] + sleep 2
02:45:55 [2025-11-25T02:45:55.012Z] + docker exec ****-**** pg_isready -U **** -d ****
02:45:55 [2025-11-25T02:45:55.264Z] /var/run/****ql:5432 - accepting connections
02:45:55 [2025-11-25T02:45:55.264Z] + docker-compose -f docker-compose.tmp.yml up -d ****-backup
02:45:55 [2025-11-25T02:45:55.516Z]  Container ****-****  Running
02:45:55 [2025-11-25T02:45:55.516Z]  Container datashield-backup  Creating
02:45:56 [2025-11-25T02:45:56.069Z]  Container datashield-backup  Created
02:45:56 [2025-11-25T02:45:56.069Z]  Container ****-****  Waiting
02:45:57 [2025-11-25T02:45:57.935Z]  Container ****-****  Healthy
02:45:57 [2025-11-25T02:45:57.935Z]  Container datashield-backup  Starting
02:46:00 [2025-11-25T02:46:00.422Z]  Container datashield-backup  Started
02:46:00 [2025-11-25T02:46:00.422Z] + rm docker-compose.tmp.yml
[Pipeline] }
[Pipeline] // withCredentials
[Pipeline] echo
02:46:01 [2025-11-25T02:46:01.033Z] โœ… PostgreSQL deployed successfully
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Verify Deployment)
[Pipeline] script
[Pipeline] {
[Pipeline] echo
02:46:02 [2025-11-25T02:46:02.106Z] ๐Ÿ” Verifying deployment...
[Pipeline] withCredentials
02:46:02 [2025-11-25T02:46:02.312Z] Masking supported pattern matches of $POSTGRES_PASSWORD or $POSTGRES_DB or $POSTGRES_USER
[Pipeline] {
[Pipeline] sh
02:46:02 [2025-11-25T02:46:02.832Z] + export POSTGRES_DB=****
02:46:02 [2025-11-25T02:46:02.832Z] + export POSTGRES_USER=****
02:46:02 [2025-11-25T02:46:02.832Z] + export PGPASSWORD=****
02:46:02 [2025-11-25T02:46:02.832Z] + echo ๐Ÿณ Container status:
02:46:02 [2025-11-25T02:46:02.832Z] ๐Ÿณ Container status:
02:46:02 [2025-11-25T02:46:02.832Z] + docker ps
02:46:02 [2025-11-25T02:46:02.832Z] + grep ****
02:46:02 [2025-11-25T02:46:02.833Z] c44f7581bd3f   ****:18-alpine                     "docker-entrypoint.sโ€ฆ"   7 seconds ago    Up 4 seconds              5432/tcp                                                                                   datashield-backup
02:46:02 [2025-11-25T02:46:02.835Z] 56714784482e   ****:18-alpine                     "docker-entrypoint.sโ€ฆ"   13 seconds ago   Up 10 seconds (healthy)   0.0.0.0:5432->5432/tcp, [::]:5432->5432/tcp                                                ****-****
02:46:02 [2025-11-25T02:46:02.836Z] + echo ๐Ÿ”— Testing database connection...
02:46:02 [2025-11-25T02:46:02.836Z] ๐Ÿ”— Testing database connection...
02:46:02 [2025-11-25T02:46:02.836Z] + docker exec -e PGPASSWORD=**** ****-**** psql -h localhost -U **** -d **** -c SELECT 1 as connection_test;
02:46:03 [2025-11-25T02:46:03.389Z]  connection_test 
02:46:03 [2025-11-25T02:46:03.389Z] -----------------
02:46:03 [2025-11-25T02:46:03.389Z]                1
02:46:03 [2025-11-25T02:46:03.389Z] (1 row)
02:46:03 [2025-11-25T02:46:03.389Z] 
02:46:03 [2025-11-25T02:46:03.390Z] + echo ๐Ÿ“Š Database statistics:
02:46:03 [2025-11-25T02:46:03.390Z] ๐Ÿ“Š Database statistics:
02:46:03 [2025-11-25T02:46:03.390Z] + docker exec -e PGPASSWORD=**** ****-**** psql -h localhost -U **** -d **** -c 
02:46:03 [2025-11-25T02:46:03.390Z]                                 SELECT
02:46:03 [2025-11-25T02:46:03.390Z]                                     'total schemas' as check,
02:46:03 [2025-11-25T02:46:03.390Z]                                     COUNT(*)::text as result
02:46:03 [2025-11-25T02:46:03.390Z]                                 FROM information_schema.schemata
02:46:03 [2025-11-25T02:46:03.390Z]                                 WHERE schema_name NOT IN ('information_schema', 'pg_catalog');
02:46:03 [2025-11-25T02:46:03.390Z]                             
02:46:03 [2025-11-25T02:46:03.642Z]      check     | result 
02:46:03 [2025-11-25T02:46:03.643Z] ---------------+--------
02:46:03 [2025-11-25T02:46:03.643Z]  total schemas | 2
02:46:03 [2025-11-25T02:46:03.643Z] (1 row)
02:46:03 [2025-11-25T02:46:03.643Z] 
02:46:03 [2025-11-25T02:46:03.643Z] + echo ๐Ÿ’พ Testing backup system...
02:46:03 [2025-11-25T02:46:03.643Z] ๐Ÿ’พ Testing backup system...
02:46:03 [2025-11-25T02:46:03.643Z] + docker exec ****-backup /scripts/backup_check.sh
02:46:03 [2025-11-25T02:46:03.643Z] Error response from daemon: No such container: ****-backup
02:46:03 [2025-11-25T02:46:03.643Z] + echo โš ๏ธ  Backup check not available (container might be starting)
02:46:03 [2025-11-25T02:46:03.644Z] โš ๏ธ  Backup check not available (container might be starting)
[Pipeline] }
[Pipeline] // withCredentials
[Pipeline] echo
02:46:04 [2025-11-25T02:46:04.160Z] โœ… Deployment verification completed
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Performance Test)
[Pipeline] script
[Pipeline] {
[Pipeline] echo
02:46:06 [2025-11-25T02:46:06.536Z] โšก Running performance tests...
[Pipeline] withCredentials
02:46:07 [2025-11-25T02:46:07.805Z] Masking supported pattern matches of $POSTGRES_PASSWORD or $POSTGRES_DB or $POSTGRES_USER
[Pipeline] {
[Pipeline] sh
02:46:08 [2025-11-25T02:46:08.205Z] + export POSTGRES_DB=****
02:46:08 [2025-11-25T02:46:08.206Z] + export POSTGRES_USER=****
02:46:08 [2025-11-25T02:46:08.206Z] + export PGPASSWORD=****
02:46:08 [2025-11-25T02:46:08.206Z] + echo ๐Ÿ“ˆ Running basic performance queries...
02:46:08 [2025-11-25T02:46:08.206Z] ๐Ÿ“ˆ Running basic performance queries...
02:46:08 [2025-11-25T02:46:08.206Z] + docker exec -e PGPASSWORD=**** ****-**** psql -h localhost -U **** -d **** -c 
02:46:08 [2025-11-25T02:46:08.206Z]                                 -- Test basic query performance
02:46:08 [2025-11-25T02:46:08.206Z]                                 EXPLAIN ANALYZE SELECT 1 as test_query;
02:46:08 [2025-11-25T02:46:08.206Z] 
02:46:08 [2025-11-25T02:46:08.206Z]                                 -- Test system catalog performance
02:46:08 [2025-11-25T02:46:08.206Z]                                 EXPLAIN ANALYZE SELECT COUNT(*) FROM information_schema.tables;
02:46:08 [2025-11-25T02:46:08.206Z] 
02:46:08 [2025-11-25T02:46:08.206Z]                                 -- Test connection info
02:46:08 [2025-11-25T02:46:08.206Z]                                 SELECT database_name, process_count FROM (
02:46:08 [2025-11-25T02:46:08.207Z]                                     SELECT datname as database_name, COUNT(*) as process_count
02:46:08 [2025-11-25T02:46:08.207Z]                                     FROM pg_stat_activity
02:46:08 [2025-11-25T02:46:08.207Z]                                     GROUP BY datname
02:46:08 [2025-11-25T02:46:08.207Z]                                 ) as activity_stats;
02:46:08 [2025-11-25T02:46:08.207Z]                             
02:46:08 [2025-11-25T02:46:08.458Z]                                       QUERY PLAN                                       
02:46:08 [2025-11-25T02:46:08.458Z] ---------------------------------------------------------------------------------------
02:46:08 [2025-11-25T02:46:08.458Z]  Result  (cost=0.00..0.01 rows=1 width=4) (actual time=0.005..0.009 rows=1.00 loops=1)
02:46:08 [2025-11-25T02:46:08.458Z]  Planning:
02:46:08 [2025-11-25T02:46:08.458Z]    Buffers: shared hit=3
02:46:08 [2025-11-25T02:46:08.459Z]  Planning Time: 0.192 ms
02:46:08 [2025-11-25T02:46:08.459Z]  Execution Time: 0.136 ms
02:46:08 [2025-11-25T02:46:08.459Z] (5 rows)
02:46:08 [2025-11-25T02:46:08.459Z] 
02:46:08 [2025-11-25T02:46:08.459Z]                                                                                                                                             QUERY PLAN                                                                                                                                            
02:46:08 [2025-11-25T02:46:08.459Z] --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
02:46:08 [2025-11-25T02:46:08.459Z]  Aggregate  (cost=71.97..71.98 rows=1 width=8) (actual time=8.775..8.814 rows=1.00 loops=1)
02:46:08 [2025-11-25T02:46:08.459Z]    Buffers: shared hit=28 read=12
02:46:08 [2025-11-25T02:46:08.459Z]    ->  Hash Left Join  (cost=36.66..71.69 rows=112 width=0) (actual time=6.031..8.440 rows=215.00 loops=1)
02:46:08 [2025-11-25T02:46:08.459Z]          Hash Cond: (c.reloftype = t.oid)
02:46:08 [2025-11-25T02:46:08.459Z]          Buffers: shared hit=28 read=12
02:46:08 [2025-11-25T02:46:08.459Z]          ->  Hash Join  (cost=1.09..34.58 rows=112 width=4) (actual time=0.575..2.241 rows=215.00 loops=1)
02:46:08 [2025-11-25T02:46:08.460Z]                Hash Cond: (c.relnamespace = nc.oid)
02:46:08 [2025-11-25T02:46:08.460Z]                Buffers: shared hit=22 read=1
02:46:08 [2025-11-25T02:46:08.460Z]                ->  Seq Scan on pg_class c  (cost=0.00..32.67 rows=150 width=8) (actual time=0.099..0.950 rows=215.00 loops=1)
02:46:08 [2025-11-25T02:46:08.460Z]                      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:08 [2025-11-25T02:46:08.460Z]                      Rows Removed by Filter: 202
02:46:08 [2025-11-25T02:46:08.460Z]                      Buffers: shared hit=13 read=1
02:46:08 [2025-11-25T02:46:08.460Z]                ->  Hash  (cost=1.05..1.05 rows=3 width=4) (actual time=0.414..0.420 rows=4.00 loops=1)
02:46:08 [2025-11-25T02:46:08.460Z]                      Buckets: 1024  Batches: 1  Memory Usage: 9kB
02:46:08 [2025-11-25T02:46:08.460Z]                      Buffers: shared hit=9
02:46:08 [2025-11-25T02:46:08.460Z]                      ->  Seq Scan on pg_namespace nc  (cost=0.00..1.05 rows=3 width=4) (actual time=0.130..0.371 rows=4.00 loops=1)
02:46:08 [2025-11-25T02:46:08.460Z]                            Filter: (NOT pg_is_other_temp_schema(oid))
02:46:08 [2025-11-25T02:46:08.460Z]                            Buffers: shared hit=9
02:46:08 [2025-11-25T02:46:08.461Z]          ->  Hash  (cost=27.29..27.29 rows=662 width=4) (actual time=5.409..5.425 rows=639.00 loops=1)
02:46:08 [2025-11-25T02:46:08.461Z]                Buckets: 1024  Batches: 1  Memory Usage: 31kB
02:46:08 [2025-11-25T02:46:08.461Z]                Buffers: shared hit=6 read=11
02:46:08 [2025-11-25T02:46:08.461Z]                ->  Hash Join  (cost=1.09..27.29 rows=662 width=4) (actual time=0.215..4.056 rows=639.00 loops=1)
02:46:08 [2025-11-25T02:46:08.461Z]                      Hash Cond: (t.typnamespace = nt.oid)
02:46:08 [2025-11-25T02:46:08.461Z]                      Buffers: shared hit=6 read=11
02:46:08 [2025-11-25T02:46:08.461Z]                      ->  Seq Scan on pg_type t  (cost=0.00..22.62 rows=662 width=8) (actual time=0.054..1.323 rows=639.00 loops=1)
02:46:08 [2025-11-25T02:46:08.461Z]                            Buffers: shared hit=5 read=11
02:46:08 [2025-11-25T02:46:08.461Z]                      ->  Hash  (cost=1.04..1.04 rows=4 width=4) (actual time=0.118..0.123 rows=4.00 loops=1)
02:46:08 [2025-11-25T02:46:08.461Z]                            Buckets: 1024  Batches: 1  Memory Usage: 9kB
02:46:08 [2025-11-25T02:46:08.461Z]                            Buffers: shared hit=1
02:46:08 [2025-11-25T02:46:08.461Z]                            ->  Seq Scan on pg_namespace nt  (cost=0.00..1.04 rows=4 width=4) (actual time=0.076..0.086 rows=4.00 loops=1)
02:46:08 [2025-11-25T02:46:08.461Z]                                  Buffers: shared hit=1
02:46:08 [2025-11-25T02:46:08.461Z]  Planning:
02:46:08 [2025-11-25T02:46:08.461Z]    Buffers: shared hit=332 read=14
02:46:08 [2025-11-25T02:46:08.462Z]  Planning Time: 11.125 ms
02:46:08 [2025-11-25T02:46:08.462Z]  Execution Time: 10.059 ms
02:46:08 [2025-11-25T02:46:08.462Z] (35 rows)
02:46:08 [2025-11-25T02:46:08.462Z] 
02:46:08 [2025-11-25T02:46:08.462Z]  database_name | process_count 
02:46:08 [2025-11-25T02:46:08.462Z] ---------------+---------------
02:46:08 [2025-11-25T02:46:08.462Z]                |             8
02:46:08 [2025-11-25T02:46:08.462Z]  ****      |             1
02:46:08 [2025-11-25T02:46:08.462Z]  authentik     |             3
02:46:08 [2025-11-25T02:46:08.462Z] (3 rows)
02:46:08 [2025-11-25T02:46:08.462Z] 
[Pipeline] }
[Pipeline] // withCredentials
[Pipeline] echo
02:46:09 [2025-11-25T02:46:09.126Z] โœ… Performance tests completed
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Create Backup)
[Pipeline] script
[Pipeline] {
[Pipeline] echo
02:46:10 [2025-11-25T02:46:10.216Z] ๐Ÿ’พ Creating deployment backup: jenkins_backup_20251125_024610.sql
[Pipeline] withCredentials
02:46:10 [2025-11-25T02:46:10.371Z] Masking supported pattern matches of $POSTGRES_PASSWORD or $POSTGRES_DB or $POSTGRES_USER
[Pipeline] {
[Pipeline] sh
02:46:10 [2025-11-25T02:46:10.552Z] Warning: A secret was passed to "sh" using Groovy String interpolation, which is insecure.
02:46:10 [2025-11-25T02:46:10.553Z] 		 Affected argument(s) used the following variable(s): [POSTGRES_DB]
02:46:10 [2025-11-25T02:46:10.553Z] 		 See https://jenkins.io/redirect/groovy-string-interpolation for details.
02:46:10 [2025-11-25T02:46:10.815Z] + export POSTGRES_DB=****
02:46:10 [2025-11-25T02:46:10.815Z] + export POSTGRES_USER=****
02:46:10 [2025-11-25T02:46:10.815Z] + export PGPASSWORD=****
02:46:10 [2025-11-25T02:46:10.815Z] + mkdir -p jenkins_backups
02:46:10 [2025-11-25T02:46:10.816Z] + docker exec -e PGPASSWORD=**** ****-**** pg_dump -h localhost -U **** -d **** --format=custom --compress=9 --file=/tmp/jenkins_backup_20251125_024610.sql
02:46:11 [2025-11-25T02:46:11.729Z] + docker cp ****-****:/tmp/jenkins_backup_20251125_024610.sql jenkins_backups/
02:46:11 [2025-11-25T02:46:11.729Z] + cd jenkins_backups
02:46:11 [2025-11-25T02:46:11.729Z] + sha256sum jenkins_backup_20251125_024610.sql
02:46:11 [2025-11-25T02:46:11.729Z] + echo โœ… Backup created: jenkins_backup_20251125_024610.sql
02:46:11 [2025-11-25T02:46:11.729Z] โœ… Backup created: jenkins_backup_20251125_024610.sql
02:46:11 [2025-11-25T02:46:11.729Z] + ls -lh jenkins_backup_20251125_024610.sql
02:46:11 [2025-11-25T02:46:11.729Z] -rw-r--r-- 1 root root 6.9K Nov 25 02:46 jenkins_backup_20251125_024610.sql
[Pipeline] }
[Pipeline] // withCredentials
[Pipeline] archiveArtifacts
02:46:12 [2025-11-25T02:46:12.075Z] Archiving artifacts
02:46:12 [2025-11-25T02:46:12.081Z] Recording fingerprints
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Declarative: Post Actions)
[Pipeline] script
[Pipeline] {
[Pipeline] echo
02:46:15 [2025-11-25T02:46:15.142Z] ๐Ÿ“‹ Pipeline completed with status: SUCCESS
[Pipeline] echo
02:46:15 [2025-11-25T02:46:15.227Z] 
02:46:15 [2025-11-25T02:46:15.227Z]                     ๐ŸŽฏ PostgreSQL Deployment Pipeline
02:46:15 [2025-11-25T02:46:15.227Z]                     ๐Ÿ“… Build: 31
02:46:15 [2025-11-25T02:46:15.227Z]                     ๐ŸŒฟ Branch: null
02:46:15 [2025-11-25T02:46:15.227Z]                     ๐Ÿท๏ธ  Commit: ade1f21b
02:46:15 [2025-11-25T02:46:15.227Z]                     โฑ๏ธ  Duration: 1 min 14 sec and counting
02:46:15 [2025-11-25T02:46:15.227Z]                     โœ… Status: SUCCESS
02:46:15 [2025-11-25T02:46:15.227Z]                 
[Pipeline] sh
02:46:15 [2025-11-25T02:46:15.581Z] + + + find jenkins_backups -name *.sql -type f
02:46:15 [2025-11-25T02:46:15.581Z] sort -r
02:46:15 [2025-11-25T02:46:15.581Z] tail -n +6
02:46:15 [2025-11-25T02:46:15.581Z] + xargs rm -f
[Pipeline] }
[Pipeline] // script
[Pipeline] script
[Pipeline] {
[Pipeline] echo
02:46:16 [2025-11-25T02:46:16.186Z] ๐ŸŽ‰ PostgreSQL deployment successful!
[Pipeline] }
[Pipeline] // script
[Pipeline] script
[Pipeline] {
[Pipeline] echo
02:46:16 [2025-11-25T02:46:16.645Z] ๐Ÿงน Cleaning up workspace...
[Pipeline] sh
02:46:17 [2025-11-25T02:46:17.068Z] + rm -f *.tmp
[Pipeline] echo
02:46:17 [2025-11-25T02:46:17.190Z] โœ… 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