pipeline中构建多个docker服务并行发布,有次序启动

目的及其效果

效果

基础目的

  • 使用pipeline能够完成基本的多服务项目发送到指定服务器
  • 能够并行执行基础服务
  • 能够阶段性的有顺序的执行特定服务
  • 脚本中避免出现隐私内容
  • 能够实现业务脚本执行

jenkins设置

  • 添加全局jenkins凭据
 注意选择 `ssh username with private key` 类型,然后选择 `Enter directly`  在下面的输入框中输入登录服务器的`pem`文件内容。
  • 同时拷贝pem文件在jenkins执行节点,使用远程命令手动执行一次(命令随意,ls 都可以),防止jenkins自动执行出错。
 ##举例:
 ssh -i pem文件 root@192.168.1.111 jps

pipeline脚本文件使用凭据登录远程服务器或者远程执行脚本文件

注意事项

  • pem文件授权,如果不修改权限root用户会出现问题
 sh "chmod 600 ${pem}"
  • 发送文件
sh "scp -i ${pem} ${WORKSPACE}/start.sh root@${remoteHost}:${remoteDir}"
  • 执行脚本文件
sh "ssh -i ${pem} root@${remoteHost} \"chmod +x ${remoteDir}/start.sh appname \" "

DockerFile文件使用动态参数构建,避免每个模块都需要一个DockerFile

  • 以java中jar包来说
#基础镜像
FROM openjdk:8-jdk-alpine
#外部参数  区分不同服务
ARG APPNAME
#挂载容器的位置, 容易找到
VOLUME /wjl/docker
#添加打包jar包/war包
ADD $APPNAME.jar /APP.jar

RUN echo $APPNAME.jar
#运行命令
ENTRYPOINT ["java","-jar","/APP.jar","--spring.profiles.active=pro"]
  • 用脚本执行的时候只需要带不同文件的参数
##appname:不同jar包名称,确保jar包和DockerFile在一起  img_tag:镜像标签
docker build --build-arg APPNAME=$appname -t $img_tag  .

演示demo全局流水线并行脚本

def build = "jenkins-${JOB_NAME}-${BUILD_NUMBER}"
def remoteDir = "/home/www"
def remoteHost = "192.168.1.102"
def credentialsId = "sfgdffghfghfngf"
def remoteUser = "root"
pipeline {
    agent any
    stages {
        stage('环境检查') {
            steps {
                echo "${params}"
                sh 'mvn --version'
                echo '开始拉取代码.....'
            }
        }
        stage('构建jar包') {
                    steps {
                        sh 'jps'
                        sh 'ls'
                    }
               }
        stage('发送至指定服务器') {
                     steps {
                       withCredentials([sshUserPrivateKey(credentialsId: credentialsId, keyFileVariable: 'pem')]) {
                              echo "区分构建ID: ${build}"
                              echo "项目构建结果路径:${WORKSPACE}"
                              sh "chmod 600 ${pem}"
							  sh "touch aaa.sh"
                              sh "scp -i ${pem} ${WORKSPACE}/aaa.sh root@${remoteHost}:${remoteDir}"
                              sh "ssh -i ${pem} root@${remoteHost} \"chmod +x ${remoteDir}/aaa.sh \" "
                              echo '发送成功'
                           }
                      }
               }
        stage('服务启动') {
                failFast true
                parallel {
                        stage('部署A服务') {
                            steps {
                                withCredentials([sshUserPrivateKey(credentialsId: credentialsId, keyFileVariable: 'pem')]) {
                                               echo "开始部署A服务"
                                               sh "chmod 600 ${pem}"
                                               sh "ssh -i ${pem} root@${remoteHost} \" jps \" "
                                            }
                            }
                           }
                        stage('部署C服务') {
                            steps {
                                withCredentials([sshUserPrivateKey(credentialsId: credentialsId, keyFileVariable: 'pem')]) {
                                                   echo "开始部署B服务"
                                                   sh "chmod 600 ${pem}"
                                                   sh "ssh -i ${pem} root@${remoteHost} \" jps \" "
                                                }
                            }
                           }
                       stage('部署D服务') {
                               steps {
                                   withCredentials([sshUserPrivateKey(credentialsId: credentialsId, keyFileVariable: 'pem')]) {
                                                      echo "开始部署C服务"
                                                      sh "chmod 600 ${pem}"
                                                      sh "ssh -i ${pem} root@${remoteHost} \" jps\" "
                                                   }
                               }
                              }
                      }
                  }

          stage('部署E服务') {
                          steps {
                             withCredentials([sshUserPrivateKey(credentialsId: credentialsId, keyFileVariable: 'pem')]) {
                                   echo "开始部署E服务"
                                   sh "chmod 600 ${pem}"
                                   sh "ssh -i ${pem} root@${remoteHost} \" jps \" "
                                }
                          }
                     }
	  }
    post {
            
            success {
                echo 'I succeeeded!'
            }
        }
}


最后

  • 求赞求关注,有问题请留言
  • 文章来源公众号 苏克分享
1 个赞