|
@@ -161,32 +161,48 @@ node {
|
|
|
|
|
|
if ("${PUBLISH_SSH_SERVER_SELECT}" != "[]") {
|
|
|
// 遍历所有服务器,分别部署
|
|
|
- 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)])
|
|
|
- }
|
|
|
+ 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)])
|
|
|
+ }
|
|
|
} else {
|
|
|
echo '****************************** 项目不部署 ******************************'
|
|
|
}
|