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镜像运行的实现
    文章图片


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

    【Jenkins打包微服务构建Docker镜像运行的实现】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.188

    4.检查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 $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入参

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


    提交代码,开始构建

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


    构建成功

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


    代码审查SonarQube

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


    镜像仓库Harbor

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


    188远程服务器拉取的镜像

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


    查看容器启动状态

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


    访问测试容器

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

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

      推荐阅读