如何使用Jenkins打包微服务构建Docker镜像运行
导读:本文共7393字符,通常情况下阅读需要25分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 环境准备1.Jenkins2.GitLab3.SonarQube4.Harbor5.Docker6.Maven7.JDK1.88.微服务项目以上技术部分在我之前的文章中有写过这里就不过多细化的演示,本文章主要是连贯性的将微服务项目源代码–>提交远程仓库GitLab–>Jenkins从Gitlab拉取代码到服务器–>SonarQube代码审核–&... ...
目录
(为您整理了一些要点),点击可以直达。环境准备
1.Jenkins
2.GitLab
3.SonarQube
4.Harbor
5.Docker
6.Maven
7.JDK1.8
8.微服务项目
以上技术部分在我之前的文章中有写过
这里就不过多细化的演示,本文章主要是连贯性的将微服务项目源代码–>提交远程仓库GitLab–>Jenkins从Gitlab拉取代码到服务器–>SonarQube代码审核–>Maven编译打包–>构建Docker镜像–>推送私有Harbor镜像仓库–>其他服务器部署
开始
1.GitLab远程仓库创建微服务项目
2.IDEA代码推送到Gitlab
默认文件夹对了就不用更改
添加本地仓库
提交本地仓库
推送远程仓库
3.Jenkins创建流水线项目
4.参数化构建
5.拉取远程仓库的构建脚本
应用保存
6.编写远程审查脚本sonar-project.properties
构建脚本
1.拉取代码
stage('拉取代码'){checkout([$class:'GitSCM',branches:[[name:"*/${branch}"]],doGenerateSubmoduleConfigurations:false,extensions:[],submoduleCfg:[],userRemoteConfigs:[[credentialsId:"${git_auth}",url:"${git_url}"]]])}
2.审查代码
stage('代码审查'){//定义当前Jenkins的SonarQubeScanner工具defscannerHome=tool'SonarQube'//引用当前JenkinsSonarQube环境withSonarQubeEnv('SonarQube'){sh"""cd${project_name}//这是定义的选项参数${scannerHome}/bin/sonar-scanner"""}}
3.安装公共模块
stage('编译,安装公共子工程'){sh"mvn-ftensquare_commoncleaninstall"}
查看服务器
4.编译打包微服务
stage('编译,打包微服务工程'){sh"mvn-f${project_name}cleanpackage"}
查看服务器
截止目前构建流程
5.构建docker镜像
项目中添加Dockerfile文件,
#FROMjava:8#FROMopenjdk:11-jdk-alpineFROMopenjdk:11ARGJAR_FILECOPY${JAR_FILE}app.jarEXPOSE9001ENTRYPOINT["java","-jar","/app.jar"]
每个微服务项目Maven中添加dockerfile插件
<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>
修改Jenkinsfile文件服务打包后添加dockerfile:build" 用于触发docker镜像构建
stage('编译,打包微服务工程'){sh"mvn-f${project_name}cleanpackagedockerfile:build"}
并推送到远程仓库
Jenkins从新构建
查看服务器
dockerimages
镜像构建成功
6.镜像打标签
公共属性
//镜像的版本号deftag=“latest”//Harbor的url地址defharbor_url=“192.168.0.188:9123”//镜像库项目名称defharbor_project=“tensquare”
stage('编译,打包微服务工程上传镜像'){//编译打包--构建镜像sh"mvn-f${project_name}cleanpackagedockerfile:build"//定义镜像名称defimageName="${project_name}:${tag}"//对镜像打上标签sh"dockertag${imageName}${harbor_url}/${harbor_project}/${imageName}"}
推送远程服务器并Jenkins构建
查看服务器镜像
7.镜像推送到harbor私有仓库
这里要在Harbor上提现创建一个仓库
Jenkins添加harbor用户凭证
进入流水线语法生成harbor的语法
stage('编译,打包微服务工程上传镜像'){//编译打包--构建镜像sh"mvn-f${project_name}cleanpackagedockerfile:build"//定义镜像名称defimageName="${project_name}:${tag}"//对镜像打上标签sh"dockertag${imageName}${harbor_url}/${harbor_project}/${imageName}"//把镜像推送到HarborwithCredentials([usernamePassword(credentialsId:"${harbor_auth}",passwordVariable:'password',usernameVariable:'username')]){//登录到Harborsh"dockerlogin-u${username}-p${password}${harbor_url}"//镜像上传sh"dockerpush${harbor_url}/${harbor_project}/${imageName}"sh"echo镜像上传成功"}}
推送远程仓库,Jenkins远程构建,查看推送到私有仓库的镜像
远程推送镜像成功!!!
8.拉取镜像并启动程序
由于需要远程拉取镜像和启动程序,所以需要先在Jenkins上安装Publish Over SSH插件,实现远程发送Shell命令
配置插件
这里需要注意一下,需要两台服务器建立通信,使用ssh远程连接,即Jenkins使用ssh远程操作188服务器拉取镜像,启动应用
这个过程中需要Jenkins的宿主服务器产生公钥、私钥然后copy给188服务器,
1.切换到ssh目录下
cd/root/.ssh如果提示:bash:cd:.ssh:没有那个文件或目录执行sshhostname(你自己的主机名)
2.在Jenkins宿主服务器上执行生成公私钥的命令
ssh-keygen-trsa
然后对比下面
id_rsa为私钥 id_rsa.pub为公钥
3.复制公钥id_rsa.pub到188服务器
ssh-copy-id192.168.0.188
4.检查188服务器拷贝到的密钥
5.测试Jenkins的ssh远程连接
测试成功
6.使用流水线语法生成器生成ssh命令
复制到Jenkinsfile文件中
//应用部署sh"echo应用部署"sshPublisher(publishers:[sshPublisherDesc(configName:'188',transfers:[sshTransfer(cleanRemote:false,excludes:'',execCommand:"/data/Jenkins_shell/deploy.sh$harbor_url$harbor_project$project_name$tag$port",execTimeout:120000,flatten:false,makeEmptyDirs:false,noDefaultExcludes:false,patternSeparator:'[,]+',remoteDirectory:'',remoteDirectorySDF:false,removePrefix:'',sourceFiles:'')],usePromotionTimestamp:false,useWorkspaceInPromotion:false,verbose:false)])/data/Jenkins_shell/deploy.sh这个路径指向是一个脚本文件,用于操作docker容器的,这个脚本提供在下面$harbor_url 镜像私有仓库地址$harbor_project 私有仓库中的项目名$project_name 项目名$tag拉取镜像的版本$port这个参数还需要额外在Jenkins构建是提供参数这几个参数与线面这个文件中的参数是一一对应的
#!/bin/sh#接收外部参数harbor_url=$1harbor_project=$2project_name=$3tag=$4port=$5imageName=$harbor_url/$harbor_project/$project_name:$tagecho"$imageName"#查询容器是否存在,存在则删除containerId=`dockerps-a|grep-w${project_name}:${tag}|awk'{print$1}'`if["$containerId"!=""];then#停掉容器dockerstop$containerId#删除容器dockerrm$containerId echo"成功删除容器"fi#查询镜像是否存在,存在则删除imageId=`dockerimages|grep-w$project_name|awk'{print$3}'`if["$imageId"!=""];then#删除镜像dockerrmi-f$imageId echo"成功删除镜像"fi#登录Harbordockerlogin-uuser-p877425287User$harbor_url#下载镜像dockerpull$imageName#启动容器dockerrun-di-p$port:$port$imageNameecho"容器启动成功"
添加Jenkins入参
提交代码,开始构建
构建成功
代码审查SonarQube
镜像仓库Harbor
188远程服务器拉取的镜像
查看容器启动状态
访问测试容器
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
如何使用Jenkins打包微服务构建Docker镜像运行的详细内容,希望对您有所帮助,信息来源于网络。