Jenkins骚操作第十一章之SpringCloud生产环境应用

6 篇文章 1 订阅
4 篇文章 0 订阅

一、Jenkins+Docker+SpringCloud持续集成流程

在这里插入图片描述

文字流程

开发人员每天把代码提交到 Gitlab 代码仓库。

Jenkins 从 Gitlab 中拉取项目源码,编译并打成 jar 包,然后构建成 Docker 镜像,将镜像上传到 Harbor 私有仓库。

Jenkins 发送 SSH 远程命令,让生产部署服务器到 Harbor 私有仓库拉取镜像到本地,然后创建容器。

最后,用户可以访问到容器

二、利用Jenkins打包微服务项目

1、生成公共子工程 pom 文件

1.1、修改 Jenkinsfile

def git_auth="e6ede7de-abef-449e-be67-a9a72feb5fb2"
def git_url="git@192.168.199.141:major/tensquare_back_New.git"

node {
    stage('pull code') { 
 checkout([$class: 'GitSCM', branches: [[name: '*/${branch}']], extensions: [], userRemoteConfigs: [[credentialsId: '${git_auth}', url: '${git_url}']]])
    }
     stage('check code') {
            //定义SonarQubeScanner工具
            def scannerHome = tool 'sonar-scanner'
            //引用SonarQube系统环境
            withSonarQubeEnv('sonarqube') {
            sh """
                     cd ${project_name}
                     ${scannerHome}/bin/sonar-scanner
                    """
               }
    }
     //添加公共子工程
    stage('make install public sub project') {
        sh "mvn -f tensquare_common clean install"
 	}
 }

1.2、修改各个pom.xml

把 parent 父工程 pom.xml 中的 maven 插件代码移至除了 tensquare_common 以外每个子工程 pom.xml 中

修改tensquare_parent的pom.xm

<build>
    <plugins>
        <plugin>
            <!--提供打包(将应用打包成可执行的jar包)-->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

common不是运行的微服务,所以不需要添加springboot-maven插件

在这里插入图片描述

其他微服务配置

整理完后提交到gitlab中
在这里插入图片描述
在这里插入图片描述

Jenkins再次构建,先构建eureka服务

在这里插入图片描述

2、开始编译打包所有微服务项目

2.1、修改Jenkinsfile并提交

def git_auth="e6ede7de-abef-449e-be67-a9a72feb5fb2"
def git_url="git@192.168.199.141:major/tensquare_back_New.git"


node {
    stage('pull code') { 
 checkout([$class: 'GitSCM', branches: [[name: '*/${branch}']], extensions: [], userRemoteConfigs: [[credentialsId: '${git_auth}', url: '${git_url}']]])
    }
     stage('check code') {
            //定义SonarQubeScanner工具
            def scannerHome = tool 'sonar-scanner'
            //引用SonarQube系统环境
            withSonarQubeEnv('sonarqube') {
            sh """
                     cd ${project_name}
                     ${scannerHome}/bin/sonar-scanner
                    """
               }
    //添加公共子工程
    stage('make install public sub project') {
        sh "mvn -f tensquare_common clean install"
    }
    //打包微服务项目
    stage('make package') {
        sh "mvn -f ${project_name} clean package"
    }
}

再次构建项目,先构建eureka服务

在这里插入图片描述

继续构建tensquare_zuul服务网关

在这里插入图片描述

原因:Jenkins服务器中并没有tensquare_paren工程,而zuul需要依赖这个工程解决方法:传递父工程进Jenkins仓库

[root@jenkins target]# cd /root/repo/
[root@jenkins repo]# ls
在这里插入图片描述

[root@jenkins repo]# cd com
[root@jenkins com]# cd tensquare/
在这里插入图片描述
此时把父工程目录传递进去

在这里插入图片描述

继续打包zuul服务网关

在这里插入图片描述

继续打包权限中心服务

在这里插入图片描述

最后打包活动微服务

在这里插入图片描述

三、利用docker-maven-plugin插件化构建docker镜像

1、在每个微服务项目的pom.xml加入dockerfile-maven-plugin插件

在这里插入图片描述

<plugin>
     <groupId>com.spotify</groupId>
     <artifactId>dockerfile-maven-plugin
      </artifactId>
           <version>1.3.6</version>
             <configuration>
             <repository>${project.artifactId}</repository>
             <buildArgs>
             <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
             </buildArgs>
    </configuration>
</plugin>

2、在每个微服务项目根目录下建立dockerfile文件

在这里插入图片描述

#FROM java:8
FROM openjdk:8-jdk-alpine 
ARG JAR_FILE
COPY ${JAR_FILE} app.jar 
EXPOSE 10086
ENTRYPOINT ["java","-jar","/app.jar"]

注意 每个项目公开的端口不一样

3、修改Jenkinsfile构建脚本

def git_auth="e6ede7de-abef-449e-be67-a9a72feb5fb2"
def git_url="git@192.168.199.141:major/tensquare_back_New.git"

node {
    stage('pull code') { 
 checkout([$class: 'GitSCM', branches: [[name: '*/${branch}']], extensions: [], userRemoteConfigs: [[credentialsId: '${git_auth}', url: '${git_url}']]])
    }
     stage('check code') {
            //定义SonarQubeScanner工具
            def scannerHome = tool 'sonar-scanner'
            //引用SonarQube系统环境
            withSonarQubeEnv('sonarqube') {
            sh """
                     cd ${project_name}
                     ${scannerHome}/bin/sonar-scanner
                    """
               }
    }
    //添加公共子工程
    stage('make install public sub project') {
        sh "mvn -f tensquare_common clean install"
    }
    //打包微服务项目
    stage('make package') {
        sh "mvn -f ${project_name} clean package dockerfile:build"
    }
}

提交Jenkinsfile

在这里插入图片描述

构建eureka服务,把四个全部构建

在这里插入图片描述

4、上传harbor仓库

4.1、修改Jenkinsfile

添加打标签步骤,用于上传镜像到harbor仓库

def git_auth="e6ede7de-abef-449e-be67-a9a72feb5fb2"
def git_url="git@192.168.199.141:major/tensquare_back_New.git"
/镜像标签
def tag="latest"
//harbor的url地址
def harbor_url="192.168.199.139:85"
//镜像仓库名
def harbor_name="tensquare"


node {
    stage('pull code') { 
 checkout([$class: 'GitSCM', branches: [[name: '*/${branch}']], extensions: [], userRemoteConfigs: [[credentialsId: '${git_auth}', url: '${git_url}']]])
    }
     stage('check code') {
            //定义SonarQubeScanner工具
            def scannerHome = tool 'sonar-scanner'
            //引用SonarQube系统环境
            withSonarQubeEnv('sonarqube') {
            sh """
                     cd ${project_name}
                     ${scannerHome}/bin/sonar-scanner
                    """
               }
    }
    //添加公共子工程
    stage('make install public sub project') {
        sh "mvn -f tensquare_common clean install"
    }
    //打包微服务,制作镜像
    stage('make package') {
        sh "mvn -f ${project_name} clean package dockerfile:build"
        //定义镜像名称
        def imageName="${project_name}:${tag}"
        //对镜像打标签
        sh "docker tag ${imageName} ${harbor_url}/${harbor_name}/${imageName}"
    }
}

提交Jenkinsfile,通过euareka测试结果

在这里插入图片描述

在这里插入图片描述

4.2、使用凭证管理Harbor私服账号和密码

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

def git_auth="e6ede7de-abef-449e-be67-a9a72feb5fb2"
def git_url="git@192.168.199.141:major/tensquare_back_New.git"
def tag="latest"
//harbor的url地址
def harbor_url="192.168.199.139:85"
//镜像仓库名
def harbor_name="tensquare"
//harbor的凭证
def harbor_auth="4fafa4e1-46ad-4c24-824b-15ba0bacbf03"

node {
    stage('pull code') { 
 checkout([$class: 'GitSCM', branches: [[name: '*/${branch}']], extensions: [], userRemoteConfigs: [[credentialsId: '${git_auth}', url: '${git_url}']]])
    }
     stage('check code') {
            //定义SonarQubeScanner工具
            def scannerHome = tool 'sonar-scanner'
            //引用SonarQube系统环境
            withSonarQubeEnv('sonarqube') {
            sh """
                     cd ${project_name}
                     ${scannerHome}/bin/sonar-scanner
                    """
               }
    }
    //添加公共子工程
    stage('make install public sub project') {
            sh  "mvn -f tensquare_common clean install"
    }
    //打包微服务,制作镜像,上传镜像
    stage('make package images,push images') {
            sh  "mvn -f ${project_name} clean package dockerfile:build"
            //定义镜像名称
            def imageName="${project_name}:${tag}"
            //对镜像打标签
            sh "docker tag ${imageName} ${harbor_url}/${harbor_name}/${imageName}"
            //镜像推送到harbor
            withCredentials([usernamePassword(credentialsId: "${harbor_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {
                //登录harbor
                sh "docker login -u ${username} -p ${password} ${harbor_url}"
                //镜像上传
                sh "docker push ${harbor_url}/${harbor_name}/${imageName}"
                sh "echo 镜像上传成功"
            }
   }
}

Jenkins提交,测试镜像,四个微服务都需上传

在这里插入图片描述
在这里插入图片描述

四、安装publish Over SSH插件

记得重启
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

配置远程部署服务器
拷贝公钥从 Jenkins 服务器拷贝到生产服务器

ssh-copy-id 192.168.199.140

在这里插入图片描述
在这里插入图片描述

def git_auth="e6ede7de-abef-449e-be67-a9a72feb5fb2"
def git_url="git@192.168.199.141:major/tensquare_back_New.git"
def tag="latest"
//harbor的url地址
def harbor_url="192.168.199.139:85"
//镜像仓库名
def harbor_name="tensquare"
//harbor的凭证
def harbor_auth="4fafa4e1-46ad-4c24-824b-15ba0bacbf03"


node {
    stage('pull code') { 
 checkout([$class: 'GitSCM', branches: [[name: '*/${branch}']], extensions: [], userRemoteConfigs: [[credentialsId: '${git_auth}', url: '${git_url}']]])
    }
     stage('check code') {
            //定义SonarQubeScanner工具
            def scannerHome = tool 'sonar-scanner'
            //引用SonarQube系统环境
            withSonarQubeEnv('sonarqube') {
            sh """
                     cd ${project_name}
                     ${scannerHome}/bin/sonar-scanner
                    """
               }
    }
    //添加公共子工程
    stage('make install public sub project') {
            sh  "mvn -f tensquare_common clean install"
    }
    //打包微服务,制作镜像,上传镜像
    stage('make package images,push images') {
            sh  "mvn -f ${project_name} clean package dockerfile:build"
            //定义镜像名称
            def imageName="${project_name}:${tag}"
            //对镜像打标签
            sh "docker tag ${imageName} ${harbor_url}/${harbor_name}/${imageName}"
            //镜像推送到harbor
            withCredentials([usernamePassword(credentialsId: "${harbor_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {
                //登录harbor
                sh "docker login -u ${username} -p ${password} ${harbor_url}"
                //镜像上传
                sh "docker push ${harbor_url}/${harbor_name}/${imageName}"
                sh "echo 镜像上传成功"
            }
              //部署应用
            sshPublisher(publishers: [sshPublisherDesc(configName: 'master_server', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "/opt/jenkins_shell/deploy.sh ${harbor_url} ${harbor_name} ${project_name} ${tag} ${port}", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
   }
}

添加端口参数

在这里插入图片描述

部署在生产环境脚本deploy.sh

#! /bin/sh
#接收外部参数
harbor_url=$1
harbor_project_name=$2
project_name=$3
tag=$4
port=$5

imageName=$harbor_url/$harbor_project_name/$project_name:$tag

echo "$imageName"

#查询容器是否存在,存在则删除
containerId=`docker ps -a | grep -w ${project_name}:${tag}  | awk '{print $1}'`
if [ "$containerId" !=  "" ] ; then
#停掉容器
    docker stop $containerId
#删除容器
    docker rm $containerId
 
 echo "成功删除容器"
fi

#查询镜像是否存在,存在则删除
imageId=`docker images | grep -w $project_name  | awk '{print $3}'`

if [ "$imageId" !=  "" ] ; then
      
    #删除镜像
    docker rmi -f $imageId
 
 echo "成功删除镜像"
fi
# 登录Harbor
docker login -u admin -p Harbor12345 $harbor_url
# 下载镜像
docker pull $imageName
# 启动容器
docker run -di -p $port:$port $imageName

echo "容器启动成功"

在生产服务器上创建目录,并放入脚本

在这里插入图片描述
在这里插入图片描述

jenkinsfile构建

在这里插入图片描述
在这里插入图片描述

在生产服务器上检查结果

在这里插入图片描述

查看服务

在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于Jenkins,GitLab和Spring Cloud的集成,您可以按照以下步骤进行操作: 1. 安装和配置Jenkins:首先,您需要在服务器上安装Jenkins,并确保其正常运行。您可以根据Jenkins官方文档进行安装和配置。 2. 安装和配置GitLab:接下来,您需要安装和配置GitLab,以便将您的代码存储在Git存储库中。您可以参考GitLab官方文档进行安装和配置。 3. 创建和管理代码仓库:在GitLab上创建一个新的代码仓库,并将您的Spring Cloud项目代码上传到该仓库中。 4. 设置Jenkins与GitLab的集成:在Jenkins中,安装GitLab插件并配置GitLab的Webhook,以便在代码提交或合并请求时触发Jenkins构建任务。 5. 配置Jenkins构建任务:在Jenkins中创建一个新的构建任务,配置源代码管理为Git,并指定GitLab仓库的URL以及访问凭证。 6. 设置构建触发器:根据您的需求,可以设置构建任务的触发器,例如提交到特定分支或定期执行构建。 7. 构建和部署Spring Cloud应用程序:在构建任务中,配置构建脚本或命令,以编译、测试和打包您的Spring Cloud应用程序。您可以使用Maven或Gradle等构建工具来执行这些操作。 8. 集成测试和部署:在构建任务中,您可以配置其他操作,例如运行集成测试、生成文档、构建镜像等。还可以配置自动部署到目标环境,例如开发、测试或生产环境。 请注意,这只是一个大致的步骤指南,具体的配置和操作可能因您的项目和环境而有所不同。您可以根据需要进行适当的调整和扩展。希望对您有所帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值