Jenkins打包微服务构建Docker镜像运行的实现

目录

  • 环境准备
  • 开始
    • 1.GitLab远程仓库创建微服务项目
    • 2.IDEA代码推送到Gitlab
    • 3.Jenkins创建流水线项目
    • 4.参数化构建
    • 5.拉取远程仓库的构建脚本
    • 6.编写远程审查脚本sonar-project.properties
  • 构建脚本

    环境准备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远程仓库创建微服务项目
    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    2.IDEA代码推送到Gitlab
    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    默认文件夹对了就不用更改

    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    添加本地仓库

    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    提交本地仓库

    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    推送远程仓库

    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    3.Jenkins创建流水线项目
    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    4.参数化构建
    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    5.拉取远程仓库的构建脚本
    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    应用保存
    6.编写远程审查脚本sonar-project.properties
    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    构建脚本1.拉取代码
    stage('拉取代码') {checkout([$class: 'GitSCM', branches: [[name:"*/${branch}"]], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_url}"]]])}
    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    2.审查代码
    stage('代码审查') {//定义当前Jenkins的SonarQubeScanner工具def scannerHome = tool 'SonarQube'//引用当前JenkinsSonarQube环境withSonarQubeEnv('SonarQube') {sh """cd ${project_name}//这是定义的选项参数${scannerHome}/bin/sonar-scanner"""}}【Jenkins打包微服务构建Docker镜像运行的实现】
    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    3.安装公共模块
    stage('编译,安装公共子工程') {sh "mvn -f tensquare_common clean install"}
    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    查看服务器

    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    4.编译打包微服务
    stage('编译,打包微服务工程') {sh "mvn -f ${project_name} clean package"}
    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    查看服务器

    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    截止目前构建流程

    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    5.构建docker镜像
    项目中添加Dockerfile文件,

    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图
    #FROM java:8#FROM openjdk:11-jdk-alpineFROM openjdk:11ARG JAR_FILECOPY ${JAR_FILE} app.jarEXPOSE 9001ENTRYPOINT ["java","-jar","/app.jar"]每个微服务项目Maven中添加dockerfile插件
    com.spotifydockerfile-maven-plugin1.3.6${project.artifactId}target/${project.build.finalName}.jar修改Jenkinsfile文件服务打包后添加dockerfile:build" 用于触发docker镜像构建
    stage('编译,打包微服务工程') {sh "mvn -f ${project_name} clean package dockerfile:build"}并推送到远程仓库
    Jenkins从新构建

    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    查看服务器
    docker images
    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    镜像构建成功
    6.镜像打标签
    公共属性
    //镜像的版本号def tag = “latest”//Harbor的url地址def harbor_url = “192.168.0.188:9123”//镜像库项目名称def harbor_project = “tensquare” stage('编译,打包微服务工程上传镜像') {//编译打包--构建镜像sh "mvn -f ${project_name} clean package dockerfile:build"//定义镜像名称def imageName = "${project_name}:${tag}"//对镜像打上标签sh "docker tag ${imageName} ${harbor_url}/${harbor_project}/${imageName}"}推送远程服务器并Jenkins构建
    查看服务器镜像

    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    7.镜像推送到harbor私有仓库
    这里要在Harbor上提现创建一个仓库
    Jenkins添加harbor用户凭证

    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    进入流水线语法生成harbor的语法

    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图
    stage('编译,打包微服务工程上传镜像') {//编译打包--构建镜像sh "mvn -f ${project_name} clean package dockerfile:build"//定义镜像名称def imageName = "${project_name}:${tag}"//对镜像打上标签sh "docker tag ${imageName} ${harbor_url}/${harbor_project}/${imageName}"//把镜像推送到HarborwithCredentials([usernamePassword(credentialsId: "${harbor_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {//登录到Harborsh "docker login -u ${username} -p ${password} ${harbor_url}"//镜像上传sh "docker push ${harbor_url}/${harbor_project}/${imageName}"sh "echo 镜像上传成功"}}推送远程仓库,Jenkins远程构建,查看推送到私有仓库的镜像

    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    远程推送镜像成功!!!
    8.拉取镜像并启动程序
    由于需要远程拉取镜像和启动程序,所以需要先在Jenkins上安装Publish Over SSH插件,实现远程发送Shell命令

    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    配置插件

    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    这里需要注意一下,需要两台服务器建立通信,使用ssh远程连接,即Jenkins使用ssh远程操作188服务器拉取镜像,启动应用
    这个过程中需要Jenkins的宿主服务器产生公钥、私钥然后copy给188服务器,
    1.切换到ssh目录下
    cd /root/.ssh如果提示:bash: cd: .ssh: 没有那个文件或目录执行ssh hostname(你自己的主机名)2.在Jenkins宿主服务器上执行生成公私钥的命令
    ssh-keygen -t rsa然后对比下面

    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    id_rsa为私钥 id_rsa.pub为公钥
    3.复制公钥id_rsa.pub到188服务器
    ssh-copy-id 192.168.0.1884.检查188服务器拷贝到的密钥

    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    5.测试Jenkins的ssh远程连接

    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    测试成功
    6.使用流水线语法生成器生成ssh命令

    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    复制到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=`docker ps -a | grep -w ${project_name}:${tag}| awk '{print $1}'`if [ "$containerId" !="" ] ; then#停掉容器docker stop $containerId#删除容器docker rm $containerIdecho "成功删除容器"fi#查询镜像是否存在,存在则删除imageId=`docker images | grep -w $project_name| awk '{print $3}'`if [ "$imageId" !="" ] ; then#删除镜像docker rmi -f $imageIdecho "成功删除镜像"fi# 登录Harbordocker login -u user -p 877425287User $harbor_url# 下载镜像docker pull $imageName# 启动容器docker run -di -p $port:$port $imageNameecho "容器启动成功"添加Jenkins入参

    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    提交代码,开始构建

    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    构建成功

    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    代码审查SonarQube

    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    镜像仓库Harbor

    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    188远程服务器拉取的镜像

    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    查看容器启动状态

    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图

    访问测试容器

    Jenkins打包微服务构建Docker镜像运行的实现

    文章插图
    到此这篇关于Jenkins打包微服务构建Docker镜像运行的实现的文章就介绍到这了,更多相关Jenkins打包构建Docker镜像内容请搜索考高分网以前的文章或继续浏览下面的相关文章希望大家以后多多支持考高分网!