|
@@ -157,51 +157,36 @@ node {
|
|
|
sh "mv -f ${JENKINS_WORKSPACE}/docker/*.jar ${PROJECT_DOCKER_HISTORY_JAR_HOME}/"
|
|
|
}
|
|
|
|
|
|
+ echo '****************************** 项目部署 ******************************'
|
|
|
+
|
|
|
if ("${PUBLISH_SSH_SERVER_SELECT}" != "[]") {
|
|
|
- echo '****************************** 项目部署 ******************************'
|
|
|
// 遍历所有服务器,分别部署
|
|
|
- for (int j = 0; j < PUBLISH_SSH_SERVER_SELECT.length; j++) {
|
|
|
- // 获取当前服务器名称
|
|
|
- def currentServerName = PUBLISH_SSH_SERVER_SELECT[j]
|
|
|
- echo '开始发布远程机器'
|
|
|
- sshPublisher(publishers: [sshPublisherDesc(
|
|
|
- // `Manage Jenkins` -> `Configure System` -> `Publish over SSH` -> `SSH Servers` 中的name值
|
|
|
- configName: "${currentServerName}",
|
|
|
- transfers: [sshTransfer(cleanRemote: false, excludes: '',
|
|
|
- // ===================== ↓↓↓↓↓↓ 执行命令 ↓↓↓↓↓↓ =====================
|
|
|
- execCommand: """
|
|
|
-
|
|
|
- // 传输部署脚本到远程服务器之后,执行该脚本运行程序
|
|
|
-
|
|
|
- cd ${PROJECT_SERVICE_LOG_HOME}
|
|
|
-
|
|
|
- // 传输脚本参数时请使用双引号包裹单个参数值,避免单个参数中存在空格等特殊符号被解析为多个参数!
|
|
|
- sh ssh-publish.sh \
|
|
|
- "${DOCKER_REGISTRY_AUTH_CMD}" \
|
|
|
- "${PROJECT_SERVICE_LOG_HOME}" \
|
|
|
- "${current_app_name}" \
|
|
|
- "${app_docker_image_name}" \
|
|
|
- "${app_docker_image_tag}" \
|
|
|
- "${app_docker_image}" \
|
|
|
- "${ETH_VALUE}" \
|
|
|
- "${current_app_port}" \
|
|
|
- "${JAVA_OPTS}"
|
|
|
-
|
|
|
- """,
|
|
|
- // 超时时间1000ms*60*2=2分钟
|
|
|
- execTimeout: 120000,
|
|
|
- flatten: false, makeEmptyDirs: false, noDefaultExcludes: false,
|
|
|
- patternSeparator: '[, ]+',
|
|
|
- // ===================== ↓↓↓↓↓↓ 传输文件 ↓↓↓↓↓↓ =====================
|
|
|
- // 传输文件
|
|
|
- sourceFiles: 'ssh-publish.sh',
|
|
|
- // 远程服务器目录
|
|
|
- remoteDirectory: "${PROJECT_SERVICE_LOG_HOME}",
|
|
|
- remoteDirectorySDF: false,
|
|
|
- // 传输时移除前缀路径
|
|
|
- removePrefix: '')],
|
|
|
- usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
|
|
|
- }
|
|
|
+ for (int j = 0; j < publish_ssh_server_select.length; j++) {
|
|
|
+ // 获取当前服务器名称
|
|
|
+ def currentServerName = publish_ssh_server_select[j]
|
|
|
+ echo '开始发布远程机器'
|
|
|
+ sshPublisher(publishers: [sshPublisherDesc(configName: "${currentServerName}",
|
|
|
+ transfers: [sshTransfer(cleanRemote: false, excludes: '',
|
|
|
+ execCommand: """
|
|
|
+ // 远程服务器下依次执行如下命令
|
|
|
+ // 删除旧容器
|
|
|
+ docker ps -a | grep ${current_app_name} | grep ${app_docker_image_tag} | awk '{print \$1}' | xargs -i docker stop {} | xargs -i docker rm {}
|
|
|
+ // 删除旧镜像
|
|
|
+ docker images | grep -E ${current_app_name} | grep ${app_docker_image_tag}| awk '{print \$3}' | uniq | xargs -I {} docker rmi --force {}
|
|
|
+ // 拉取新镜像
|
|
|
+ docker pull ${app_docker_image}
|
|
|
+ // 创建日志文件
|
|
|
+ mkdir -p ${PROJECT_SERVICE_LOG_HOME}
|
|
|
+ cd ${PROJECT_SERVICE_LOG_HOME}
|
|
|
+ touch ${current_app_name}.log
|
|
|
+ // 运行容器
|
|
|
+ echo "*** ${CURRENT_TIME} docker run -d -p ${current_app_port}:${current_app_port} -e JAVA_OPTS="${JAVA_OPTS} -Dspring.cloud.nacos.discovery.ip=`ifconfig ${ETH_VALUE} | grep inet | grep -v inet6 | awk '{print \$2}'`" -v ${PROJECT_SERVICE_LOG_HOME}/${current_app_name}.log:/home/${current_app_name}.log --name ${current_app_name} ${app_docker_image}" >> ${PROJECT_SERVICE_LOG_HOME}/run.log
|
|
|
+ docker run -d -p ${current_app_port}:${current_app_port} -e JAVA_OPTS="${JAVA_OPTS} -Dspring.cloud.nacos.discovery.ip=`ifconfig ${ETH_VALUE} | grep inet | grep -v inet6 | awk '{print \$2}'`" -v ${PROJECT_SERVICE_LOG_HOME}/${current_app_name}.log:/home/${current_app_name}.log --name ${current_app_name} ${app_docker_image}
|
|
|
+ """,
|
|
|
+ execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false,
|
|
|
+ patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '',
|
|
|
+ sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
|
|
|
+ }
|
|
|
} else {
|
|
|
echo '****************************** 项目不部署 ******************************'
|
|
|
}
|