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远程仓库创建微服务项目

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-alpine
FROM openjdk:11
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
EXPOSE 9001
ENTRYPOINT ["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} 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=$1
harbor_project=$2
project_name=$3
tag=$4
port=$5

imageName=$harbor_url/$harbor_project/$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 user -p 877425287User $harbor_url

# 下载镜像
docker pull $imageName

# 启动容器
docker run -di -p $port:$port $imageName

echo "容器启动成功"

添加Jenkins入参

提交代码,开始构建

构建成功

代码审查SonarQube

镜像仓库Harbor

188远程服务器拉取的镜像

查看容器启动状态

访问测试容器

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

(0)

相关推荐

  • springboot docker jenkins 自动化部署并上传镜像的步骤详解

    springboot + docker + jenkins自动化部署项目,jenkins.mysql.redis都是docker运行的,并且没有使用虚拟机,就在阿里云服务器(centos7)运行 1.前期准备工作不说了 2.在项目根目录下新建Dockerfile Dockerfile文件内容为: #基础镜像 FROM openjdk:12 #作者 MAINTAINER demo <demo@qq.com> VOLUME /tmp #指定配置文件,以及jar包在服务器上的路径 ENTRYPOIN

  • jenkins构建Docker 镜像实例详解

     jenkins构建Docker 镜像实例详解 前言:jenkins有Docker镜像,而之前我们说过使用jenkins打包Docker镜像,那么可否用jenkins的Docker镜像打包Docker镜像呢? 环境: CentOS 7     Docker 1.10.3 1.本机安装docker环境,并配置TCP访问接口 # vi /usr/lib/systemd/system/docker.service 修改ExecStart为: ExecStart=/usr/bin/docker daem

  • 如何基于Jenkins构建Docker镜像

    这篇文章主要介绍了基于Jenkins构建Docker镜像,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 前提意义: SpringCloud微服务里包含多个文件夹,拉取仓库的所有代码,然后过根据选项参数使用maven编译打包指定目录的jar,然后再根据这个目录的Dockerfile文件制作Docker镜像 1. SpringCloud项目结构 注意Dockerfile文件的位置,跟src和pom.xml同级,后面会用到这个文件,若不同级,后面选择

  • 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.微服务项目 以上技术部分在我之前的文章中有写过 这里就不过多细化的演示,本文章主要是连贯性的将微服

  • Docker安装jenkins实现微服务多模块打包的示例代码

    目录 1.安装 2.初始化 3.配置jenkins 3.1 安装Maven 3.2 配置Maven插件 3.3 安装svn插件 4. 创建自动化部署任务 4.1 配置清理旧的构建 4.2 创建svn账密凭证 4.3 填写build命令 4.4 首次构建 5. 配置maven运行命令及shell脚本 5.1 maven父子项目依赖指令配置 5.2打包完成之后shell命令 废话不多说,直接讲正事 1.安装 # 1.pull jenkins(若使用jdk11则可pull最新版jenkins,否则最新

  • Jenkins构建Docker镜像并推送至Harbor仓库的实现

    目录 Dockerfile文件 pom.xml Jenkins配置 ​ spring boot项目通过Jenkins集成构建Docker镜像推送到harbor仓库并启动容器然后拉取镜像到本地运行容器 Dockerfile文件 位置:存在根目录下,与src同级 FROM java:8 # 作者 MAINTAINER zhaoyc VOLUME /tmp #ARG JAR_FILE #将jar包添加到容器中并更名为app.jar ADD target/*.jar app.jar RUN bash -

  • Maven插件构建Docker镜像的实现步骤

    背景 微服务架构下,微服务在带来良好的设计和架构理念的同时,也带来了运维上的额外复杂性,尤其是在服务部署和服务监控上.单体应用是集中式的,就一个单体跑在一起,部署和管理的时候非常简单,而微服务是一个网状分布的,有很多服务需要维护和管理,对它进行部署和维护的时候则比较复杂. 下面从Dev的角度来看一下Ops的工作.从Dev提交代码,到完成集成测试的一系列步骤如下: 首先是开发人员把程序代码更新后上传到Git,然后其他的事情都将由Jenkins自动完成. 然后Git在接收到用户更新的代码后,会把消息

  • Spring Boot 2.4 新特性之一键构建Docker镜像的过程详解

    背景 在我们开发过程中为了支持 Docker 容器化,一般使用 Maven 编译打包然后生成镜像,能够大大提供上线效率,同时能够快速动态扩容,快速回滚,着实很方便.docker-maven-plugin 插件就是为了帮助我们在 Maven 工程中,通过简单的配置,自动生成镜像并推送到仓库中. spotify .fabric8 这里主要使用的主要是如下两种插件 spotify .fabric8 , - -配置通过 xml 定义出 Dockerfile 或者挂载外部 Dockerfile 通过调用

  • 通过Dockerfile构建Docker镜像的方法步骤

    Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建. Dockerfile支持Shell类的行尾添加"\"的命令换行方式,以及行首"#"进行注释的格式. 使用Dockerfile构建Docker镜像时注意事项: (1).尽量选取满足需求但较小的基础系统镜像; (2).清理编译生成文件.安装包的缓存等临时文件; (3).安装各个软件时候要指定准确的版本号,并避免引入不

  • dockerfile指令构建docker镜像的示例代码

    目录 初识Dockerfile 编写一个自己的docker 镜像: DockerFile docker build . 命令 查看镜像是如何生成的 初识Dockerfile Dockerfile就是用来构建docker镜像的构建文件!命令脚本! 通过这个脚本可以生成镜像,镜像是一层层的,脚本是一行行的命令,每行命令都是一层 dockerfile是面向开发的,我们以后要发布项目,作镜像,就需要编写dockerfile文件,这个文件十分简单. Dockerfile镜像之间成为了企业交付的标准,必须掌

  • SpringBoot构建Docker镜像的3种方式

    本文将介绍3种技术,通过 Maven 把 SpringBoot 应用构建成 Docker 镜像. (1)使用 spring-boot-maven-plugin 内置的 build-image. (2)使用 Google 的 jib-maven-plugin. (3)使用 dockerfle-maven-plugin. Spring Boot 应用 为了方便实践,需要一个 Spring Boot 项目. Demo 项目地址: https://github.com/davelms/medium-ar

随机推荐