千家信息网

如何使用Jenkins打包微服务构建Docker镜像运行

发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,这篇文章主要为大家展示了"如何使用Jenkins打包微服务构建Docker镜像运行",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何使用Jenkins打包
千家信息网最后更新 2025年02月23日如何使用Jenkins打包微服务构建Docker镜像运行

这篇文章主要为大家展示了"如何使用Jenkins打包微服务构建Docker镜像运行",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何使用Jenkins打包微服务构建Docker镜像运行"这篇文章吧。

    环境准备

    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工具            def scannerHome = tool 'SonarQube'            //引用当前JenkinsSonarQube环境            withSonarQubeEnv('SonarQube') {                 sh """                         cd ${project_name}//这是定义的选项参数                         ${scannerHome}/bin/sonar-scanner                 """            }   }



    3.安装公共模块

     stage('编译,安装公共子工程') {      sh "mvn -f tensquare_common clean install"   }


    查看服务器


    4.编译打包微服务

     stage('编译,打包微服务工程') {         sh "mvn -f ${project_name} clean package"   }


    查看服务器


    截止目前构建流程


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

    #FROM java:8#FROM openjdk:11-jdk-alpineFROM openjdk:11ARG JAR_FILECOPY ${JAR_FILE} app.jarEXPOSE 9001ENTRYPOINT ["java","-jar","/app.jar"]

    每个微服务项目Maven中添加dockerfile插件

                                            com.spotify                dockerfile-maven-plugin                1.3.6                                    ${project.artifactId}                                            target/${project.build.finalName}.jar                                                

    修改Jenkinsfile文件服务打包后添加dockerfile:build" 用于触发docker镜像构建

     stage('编译,打包微服务工程') {         sh "mvn -f ${project_name} clean package dockerfile:build"   }

    并推送到远程仓库

    Jenkins从新构建


    查看服务器

    docker images


    镜像构建成功

    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构建
    查看服务器镜像


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


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

    stage('编译,打包微服务工程  上传镜像') {         //编译打包--构建镜像         sh "mvn -f ${project_name} clean package dockerfile:build"         //定义镜像名称         def imageName = "${project_name}:${tag}"         //对镜像打上标签         sh "docker tag ${imageName} ${harbor_url}/${harbor_project}/${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_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: 没有那个文件或目录执行ssh hostname(你自己的主机名)

    2.在Jenkins宿主服务器上执行生成公私钥的命令

    ssh-keygen -t rsa

    然后对比下面


    id_rsa为私钥 id_rsa.pub为公钥

    3.复制公钥id_rsa.pub到188服务器

    ssh-copy-id 192.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=`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# 登录Harbordocker login -u user -p 877425287User $harbor_url# 下载镜像docker pull $imageName# 启动容器docker run -di -p $port:$port $imageNameecho "容器启动成功"

    添加Jenkins入参


    提交代码,开始构建


    构建成功


    代码审查SonarQube


    镜像仓库Harbor


    188远程服务器拉取的镜像


    查看容器启动状态


    访问测试容器

    以上是"如何使用Jenkins打包微服务构建Docker镜像运行"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

    镜像 服务 仓库 服务器 代码 容器 项目 编译 成功 参数 文件 脚本 推送 私有 服务项目 应用 生成 运行 公钥 内容 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 常熟标准软件开发口碑推荐 vs怎么使用数据库 青岛东信互联网科技 固定资产子系统数据库编码方案 俄乌战争网络安全的启示 现代网络技术促进家校沟通 男欢女爱视频软件开发 2021学学什么网络技术 将cvs导入数据库 互联网鹏渊科技推广 软件开发开票的综合税率 数据库是将数据从什么恢复到 网络安全审查查平台还是个人 根据网络管理部门网络安全的 分布式数据库一致性如何检测 禅道数据库只能本地连接 长宁区正规数据库报价行情 网络安全的重要性你知道吗视频 太原新华互联网科技学院 购买软件开发费用分录 wamps如何连接数据库 两融系统软件开发哪家公司好 地铁逃生哪个服务器玩家菜 花纹设计软件开发 淮安网络安全宣传活动 网络安全工程师证书要学多久 普陀区网络技术咨询服务大概费用 数据库安装第二项卡住了 英语软件开发简介 电信服务器哪个最火
    0