def remote = [:] remote.name = "dind-ssh" remote.host = "dind" remote.port = 22 remote.user = " " remote.password = " " remote.allowAnyHosts = true pipeline { agent any environment { // get APPNAME // APPNAME = "Sers" APPNAME = readFile("Publish/environment/env.APPNAME.txt") envName = readFile("Publish/environment/env.envName.txt") versionSuffix = "-${envName}${env.build_number}" // basePath = "/root/docker-cache/jenkins/jenkins_home/workspace/${APPNAME}/${envName}/${env.BRANCH_NAME}/${env.build_number}" basePath = "${env.WORKSPACE}" // NUGET_PATH = "/root/docker-cache/jenkins/jenkins_home/workspace/.nuget" NUGET_PATH = credentials("NUGET_PATH") NUGET_SERVER = credentials("NUGET_SERVER") NUGET_KEY = credentials("NUGET_KEY") DOCKER_SERVER = credentials("DOCKER_SERVER") DOCKER_ImagePrefix = "${DOCKER_SERVER}/${envName}/" DOCKER_Buildx = false DOCKER_USERNAME = " " DOCKER_PASSWORD = " " // set to " " if want to skip save releaseFiles to WebDav WebDav_BaseUrl = credentials("WebDav_BaseUrl") // WebDav_User = "username:pwd" WebDav_User = credentials("WebDav_User") build_crossPlatform = "no" dind_ssh_account = credentials("dind_ssh_account") } stages { stage('#1 deploy ?') { steps { timeout(time:600,unit:'SECONDS') { script { remote.user = "${dind_ssh_account_USR}" remote.password = "${dind_ssh_account_PSW}" env.codePath = "/root/docker-cache/jenkins/" + basePath.substring(5, basePath.length()) echo "-------- APPNAME: [$APPNAME]" echo "-------- basePath: [$basePath]" echo "-------- DOCKER_ImagePrefix: [$DOCKER_ImagePrefix]" echo "-------- codePath: [$codePath]" if ( fileExists("Publish/environment/jenkins_NoNeedApprovalForBuild.txt") ) { echo "-------- do not need approval for build" env.ApprovalForBuild = "yes" } else { echo "-------- waiting approval for build" env.ApprovalForBuild = "no" env.ApprovalForBuild = input message: "deploy ?", ok: 'Proceed?', parameters: [choice(choices:["yes","no"], description: 'if not please select no', name: 'choice')] } } } } } stage('#2 change version') { when { expression { env.ApprovalForBuild == "yes" } } steps { script { echo "#2.1 change-app-version" sshCommand remote: remote, command: "sh -c 'set -e; export versionSuffix=$versionSuffix; cd $codePath/Publish/DevOps3/build-bash; source 22.add-suffix-to-app-version.bash; echo -n \"\$nextAppVersion\" > $codePath/Publish/environment/env.appVersion.txt '" echo "#2.2 get app version" env.appVersion = readFile("Publish/environment/env.appVersion.txt") echo "-------- appVersion: [${env.appVersion}]" } } } stage('#3.0 build - run test') { when { expression { env.ApprovalForBuild == "yes" } } steps { script { sshCommand remote: remote, command: "sh -c 'set -e; export APPNAME=$APPNAME; export NUGET_PATH=$NUGET_PATH; cd $codePath/Publish/DevOps3/build-bash; sh 10.Test.bash; '" } } } stage('#3.1 build - single platflorm') { when { expression { env.ApprovalForBuild == "yes" } } steps { script { sshCommand remote: remote, command: "sh -c 'set -e; export APPNAME=$APPNAME; export NUGET_PATH=$NUGET_PATH; cd $codePath/Publish/DevOps3/build-bash; sh startup.bash; '" } } } stage('#3.2 build - cross platform') { when { expression { env.ApprovalForBuild == "yes" && env.build_crossPlatform == "yes" } } steps { script { sshCommand remote: remote, command: "sh -c 'set -e; export APPNAME=$APPNAME; export NUGET_PATH=$NUGET_PATH; cd $codePath/Publish/DevOps3/build-bash; sh 40.Station-publish-multiple.bash; '" } } } stage('#4 publish') { when { expression { env.ApprovalForBuild == "yes" } } steps { script { sshCommand remote: remote, command: "sh -c 'set -e; export APPNAME=$APPNAME;export NUGET_PATH=$NUGET_PATH; export NUGET_SERVER=$NUGET_SERVER;export NUGET_KEY=$NUGET_KEY; export DOCKER_Buildx=${env.DOCKER_Buildx};export DOCKER_ImagePrefix=${env.DOCKER_ImagePrefix};export DOCKER_USERNAME=${env.DOCKER_USERNAME};export DOCKER_PASSWORD=${env.DOCKER_PASSWORD};export DOCKER_BuildxExtArgs=\"--output=type=registry,registry.insecure=true\"; cd $codePath/Publish/DevOps3/release-bash; sh startup.bash; '" } } } stage('#5 save releaseFiles') { when { expression { env.ApprovalForBuild == "yes" && env.WebDav_BaseUrl != " " } } steps { script { sshCommand remote: remote, command: "sh -c 'set -e; export basePath=\"$codePath\"; export APPNAME=$APPNAME; export appVersion=\"$appVersion\"; export WebDav_BaseUrl=\"$WebDav_BaseUrl\"; export WebDav_User=\"$WebDav_User\"; cd $codePath/Publish/DevOps3/release-bash; sh 78.push-releaseFiles-to-webdav.bash; '" } } } } post { always { timeout(time:600,unit:'SECONDS') { script { env.CleanFiles = "yes" env.CleanFiles = input message: "Clean temp files, \n will wait for 3600 seconds. \n click abort to skip clean.", ok: 'Proceed', parameters: [choice(choices:["yes","no"], name: 'choice')] } } script { if ( CleanFiles == "yes" ) { echo "clean up workspace directory" cleanWs() // clean up tmp directory dir("${workspace}@tmp") { deleteDir() } } } } success { echo "build success !" } failure { echo "build failure !" } aborted { echo "build aborted !" } } }