pipeline { agent any parameters { string( name: 'BRANCH', defaultValue: 'dev', description: 'Ветка для деплоя' ) string( name: 'SERVER', defaultValue: '92.242.61.23', description: 'Сервер для деплоя' ) } stages { stage('Git pull') { steps { script { checkout([ $class: 'GitSCM', branches: [[name: params.BRANCH]], userRemoteConfigs: [[ url: 'https://code.3err0.ru/backdev/no-copy.git', credentialsId: 'nx-jen' ]] ]) } } } stage('Stop old container') { steps { script { withCredentials([ usernamePassword( credentialsId: 'server-root-password', usernameVariable: 'SSH_USER', passwordVariable: 'SSH_PASS' ) ]) { sh """ echo "Stop old container by branch ${params.BRANCH}..." sshpass -p '$SSH_PASS' ssh $SSH_USER@$SERVER " cd /opt/deployments/${params.BRANCH} 2>/dev/null || mkdir -p /opt/deployments/${params.BRANCH} # Stop old container if have docker-compose if [ -f 'docker-compose.yaml' ] || [ -f 'docker-compose.yml' ]; then if [ -f 'docker-compose.yaml' ]; then docker-compose -f docker-compose.yaml down 2>/dev/null || true elif [ -f 'docker-compose.yml' ]; then docker-compose -f docker-compose.yml down 2>/dev/null || true fi fi # Stop and delete container by name docker stop app-${params.BRANCH} 2>/dev/null || true docker rm app-${params.BRANCH} 2>/dev/null || true echo "Old containder deleted" " """ } } } } stage('Copy to server') { steps { script { withCredentials([ usernamePassword( credentialsId: 'server-root-password', usernameVariable: 'SSH_USER', passwordVariable: 'SSH_PASS' ) ]) { sh """ echo "Copy files on server..." # Clean mkdir sshpass -p '$SSH_PASS' ssh $SSH_USER@$SERVER " rm -rf /opt/deployments/${params.BRANCH}/* mkdir -p /opt/deployments/${params.BRANCH} " # Copy all files sshpass -p '$SSH_PASS' scp -r ./* $SSH_USER@$SERVER:/opt/deployments/${params.BRANCH}/ 2>/dev/null || true echo "Files copied" """ } } } } stage('Build on server') { steps { script { withCredentials([ usernamePassword( credentialsId: 'server-root-password', usernameVariable: 'SSH_USER', passwordVariable: 'SSH_PASS' ) ]) { sh """ echo "Build on server..." sshpass -p '$SSH_PASS' ssh $SSH_USER@$SERVER " cd /opt/deployments/${params.BRANCH} echo "Build Docker for branch ${params.BRANCH}..." # delete old docker image docker rmi app:${params.BRANCH} 2>/dev/null || true # build from branch if [ -f 'Dockerfile' ]; then docker build -t app:${params.BRANCH} . echo "Docker образ app:${params.BRANCH} собран" fi # or from docker-compose if [ -f 'docker-compose.yaml' ]; then docker-compose -f docker-compose.yaml build echo "Build from docker-compose.yaml completed" elif [ -f 'docker-compose.yml' ]; then docker-compose -f docker-compose.yml build echo "Build from docker-compose.yml completed" fi echo 'Build completed' " """ } } } } stage('Start on server') { steps { script { withCredentials([ usernamePassword( credentialsId: 'server-root-password', usernameVariable: 'SSH_USER', passwordVariable: 'SSH_PASS' ) ]) { sh """ echo "Start container..." sshpass -p '$SSH_PASS' ssh $SSH_USER@$SERVER " cd /opt/deployments/${params.BRANCH} # If have docker-compose - use them if [ -f 'docker-compose.yaml' ]; then echo "Start docker-compose.yaml..." docker-compose -f docker-compose.yaml up -d elif [ -f 'docker-compose.yml' ]; then echo "Start docker-compose.yml..." docker-compose -f docker-compose.yml up -d # If have Dockerfile - start elif [ -f 'Dockerfile' ]; then echo "Start app-${params.BRANCH}..." docker run -d \\ --name app-${params.BRANCH} \\ -p 8080:8080 \\ app:${params.BRANCH} else echo "Error:Dockerfile NOT FOUND, docker-compose.yaml or docker-compose.yml" exit 1 fi echo 'Container start' # Wait start sleep 10 # Check status echo 'status container:' if [ -f 'docker-compose.yaml' ] || [ -f 'docker-compose.yml' ]; then if [ -f 'docker-compose.yaml' ]; then docker-compose -f docker-compose.yaml ps else docker-compose -f docker-compose.yml ps fi else docker ps --filter "name=app-${params.BRANCH}" fi echo '' echo 'Apps start on:' echo 'http://$SERVER:80' " """ } } } } } post { success { echo "Deploy branch ${params.BRANCH} completed" echo "App : http://$SERVER:80" } failure { echo "Deploy failed" } } }