Browse Source

修改docker配置

zq940222 2 months ago
parent
commit
350d9696eb
1 changed files with 42 additions and 26 deletions
  1. 42 26
      Jenkinsfile

+ 42 - 26
Jenkinsfile

@@ -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 '****************************** 项目不部署 ******************************'
             }