Docker+Jenkins实现spring-boot项目持续集成

  • 环境
    Jenkins安装,准备一台server,安装略,百度一下。
    Docker安装,准备一台server,安装略,百度一下。
  • Jenkins上配置
    1. 新建一Maven的Job项目。
    1. Jenkins配置-源码
    2. Jenkins配置-构建触发器
    3. Jenkins配置-构建环境

      构建前,从集中存放配置文件的GitLab中拉取最新配置文件,包含Dockerfile,后面开始构建会引用最新文件。
      cd /data/httpd/release/b2b-configuration;git pull
      sleep 3;
      yes | cp -rfp  /data/httpd/release/b2b-configuration/Spring-partner/QA/application.yml  /home/jenkins/.jenkins/workspace/b2b-partner-test/src/main/resources/
      yes | cp -rfp  /data/httpd/release/b2b-configuration/Spring-partner/QA/Dockerfile  /home/jenkins/.jenkins/workspace/b2b-partner-test/
    4. Jenkins配置-构建和构建后操作

      先同步jar包和Dockerfile到Docker那台server上,然后用expect交互命令将shell脚本发送到Docker那台server上,进行docker容器的构建、启动、push到阿里云镜像仓库等操作。
      Jenkins这台server的rsync脚本:bash /home/jenkins/docker-test/script/b2b-rsync.sh b2b-partner-test 后带参数。
      rsync同步脚本:
      #!/bin/bash
      IP=10.10.10.10
      [email protected]
      echo -e "开始同步jar包..."
      rsync -vzrtopg --numeric-ids --progress --password-file=/etc/rsyncd.password6 /home/jenkins/.jenkins/workspace/$1/target/b2b-partner.jar [email protected]$IP::$1
      echo -e "开始同步Dockerfile..."
      rsync -vzrtopg --numeric-ids --progress --password-file=/etc/rsyncd.password6 /home/jenkins/.jenkins/workspace/$1/Dockerfile [email protected]$IP::$1
      expect /home/jenkins/docker-test/script/image_b2b.exp $IP $PASSWD $1

      expect交互命令脚本:/home/jenkins/docker-test/script/image_b2b.exp

      #!/usr/bin/expect -f
      set ipaddress [lindex $argv 0]
      set passwd [lindex $argv 1]
      set jobname [lindex $argv 2]
      spawn ssh [email protected]$ipaddress;
      expect "password:";
      send "$passwd\r";
      expect "#"
      send "sudo nohup /data/docker/layout-script/docker-qa.sh $jobname  >> /data/docker/logs/$jobname.log &\r"

      注意:执行上面expect脚本前,需将ssh的用户,到对方server的visudo配置中加入:xiaoyu ALL=(ALL) NOPASSWD: ALL, 要不然用户无法ssh过去。

    • Docker配置
      查看同步到Docker的Dockerfile,maven构建好的jar包也同步到此目录下。
      [email protected] b2b-partner-test]# ll
      总用量 61476
      -rw-rw-r-- 1 1010 1010 62944090 Jul 26 19:46 b2b-partner.jar
      -rw-rw-r-- 1 1010 1010 237 Jul 26 10:00 Dockerfile
      cat Dockerfile

      FROM registry.cn-hangzhou.aliyuncs.com/xmbaby-pre/ms-jdk8
      EXPOSE 8081
      MAINTAINER b2b-partner-test [email protected]
      ADD b2b-partner.jar /data/httpd/
      WORKDIR /data/httpd/
      ENTRYPOINT java -Xmx256m -Xss512k -jar b2b-partner.jar

      关键在Docker server上执行的docker-qa.sh脚本

      #!/bin/bash
      JOBMS=$1
      VERSION=latest
      JOBREPO=/data/docker/$1
      IMGREPO=xmbaby-test
      IMGNAME=$1
      DTIME=`date +%Y-%m-%d" "%H":"%M":"%S`
      CONTAINER_NAME=b2b-partner-test
      if [ ! -d $JOBREPO ];then
      mkdir -p $JOBREPO
      scp [email protected]:~/.jenkins/workspace/$1/target/b2b-partner.jar $JOBREPO
      scp [email protected]:~/.jenkins/workspace/$1/Dockerfile $JOBREPO
      echo -e "\n[$JOBMS]" >> /etc/rsyncd.conf
      echo "path=/data/docker/$JOBMS/" >> /etc/rsyncd.conf
      echo "comment = update
      ignore errors
      read only = no
      list = no
      hosts allow = 10.10.10.10/255.255.255.0
      auth users = root
      uid = root
      gid = root
      secrets file = /etc/rsyncd.secrets" >> /etc/rsyncd.conf
      else
      echo -e "\n时间$DTIME,开始构建job-docker镜像"
      fi
      cd $JOBREPO
      docker build -t ms-b2b/$JOBMS .
      if [ $? -ne 0 ];then
      echo -e "时间$DTIME,$JOBMS 镜像构建失败,请检查dockerfile !"
      exit
      else
      echo -e "时间$DTIME,开始删除之前job-Docker容器."
      docker rm $CONTAINER_NAME -f
      echo -e "时间$DTIME,开始运行job-Docker容器."
      docker run --name $CONTAINER_NAME -v $JOBREPO:$JOBREPO -d -p 8081:8081 ms-b2b/$JOBMS
      sleep 5
      echo -e "时间$DTIME,$CONTAINER_NAME容器创建完成.开始推送到阿里镜像仓库中..."
      IMAGEID=`docker images |grep "ms-b2b/$JOBMS" |awk ‘{print $3}‘`
      echo "Image镜像ID:$IMAGEID"
      CONTAINERID=`docker images |grep "ms-b2b/$JOBMS" |awk ‘{print $1}‘`
      echo "Container容器:$CONTAINERID"
      docker login --username=username --password=PASSWD registry.cn-hangzhou.aliyuncs.com
      docker tag $IMAGEID registry.cn-hangzhou.aliyuncs.com/$IMGREPO/$IMGNAME:$VERSION
      docker push registry.cn-hangzhou.aliyuncs.com/$IMGREPO/$IMGNAME:$VERSION
      fi
    • Jenkins上构建
      构建

      Jenkins控制台查看构建log

    原文地址:https://blog.51cto.com/10874766/2425252

    时间: 2024-10-05 04:58:26

    Docker+Jenkins实现spring-boot项目持续集成的相关文章

    Jenkins+Maven进行Java项目持续集成

    最近配置了Jenkins服务器,记录下基本过程.(当然还遇到了若干小问题,兵来将挡水来土掩就是了) Jenkins安装 安装Tomcat 从Jenkins官网下载jenkins.war文件.官网地址:http://jenkins-ci.org/,注意选择最新版本的Long-Term Support Release 把war文件部署到Tomcat中 启动Tomcat 在浏览器中配置Jenkins,浏览器地址:http://{Tomcat IP}:{Tomcat port}/jenkins/ Jen

    Docker——Jenkins + Git + Registry构建自动化持续集成环境(CI/CD)

    前言 在互联网时代,对于每一家公司,软件开发和发布的重要性不言而喻,目前已经形成一套标准的流程,最重要的组成部分就是持续集成(CI)及持续部署.交付(CD). 本文基于Jenkins+Docker+Git\Svn实现一套CI自动化发布流程,同时支持撤回. 一.发布流程设计 工作流程: 开发人员提交代码到Git或Svn版本仓库: Jenkins人工/定时触发项目构建: Jenkins拉取代码.代码编码.打包镜像.推送到镜像仓库: Jenkins在Docker主机创建容器并发布. 二.环境设计 1.

    【原创】Docker容器及Spring Boot微服务应用

    Docker容器及Spring Boot微服务应用 1 什么是Docker 1.1 Docker的出现 问题一:项目实施环境复杂问题 传统项目实施过程中经常会出现“程序在我这跑得好好的,在你那怎么就不行呢?! ” 这是一个典型的应用场景,Docker image中包含了程序需要的所有的运行时依赖,比如java的程序,肯定要在image中包含jdk:比如Python的程序,肯定要在image中包含对应版本的Python解释器.Docker把整个运行时环境打包放到image中,所以搞定了环境依赖问题

    Spring Boot 项目中使用JSP

    1    第2-2课:Spring Boot 项目中使用JSP JSP(Java Server Pages,Java 服务器页面)是一个简化的 Servlet 设计,它是由 Sun Microsystems 公司倡导.许多公司参与一起建立的一种动态网页技术标准.JSP 技术类似 ASP 技术,它是在传统的网页 HTML(标准通用标记语言的子集)文件(.html)中插入 Java 程序段(Scriptlet)和 JSP 标记(tag),从而形成 JSP 文件,后缀名为(*.jsp).用 JSP 开

    Spring Boot(十六):使用Jenkins部署Spring Boot

    Spring Boot(十六):使用Jenkins部署Spring Boot jenkins是devops神器,介绍如何安装和使用jenkins部署Spring Boot项目 jenkins搭建 部署分为四个步骤: 第一步,jenkins安装 第二步,插件安装和配置 第三步,Push SSH 第四步,部署项目 第一步 ,jenkins安装 1,准备环境 JDK:1.8Jenkins:2.83 Centos:7.3maven 3.5 注意;jdk 默认已经安装完成 2,配置 maven 版本要求m

    Gitlab CI 集成 Kubernetes 集群部署 Spring Boot 项目

    在上一篇博客中,我们成功将 Gitlab CI 部署到了 Docker 中去,成功创建了 Gitlab CI Pipline 来执行 CI/CD 任务.那么这篇文章我们更进一步,将它集成到 K8s 集群中去.这个才是我们最终的目标.众所周知,k8s 是目前最火的容器编排项目,很多公司都使用它来构建和管理自己容器集群,可以用来做机器学习训练以及 DevOps 等一系列的事情. 在这里,我们聚焦 CI/CD,针对于 Spring Boot 项目,借助 Gitlab CI 完成流水线的任务配置,最终部

    docker部署spring boot项目在服务器上

    IDE:idea 工具:docker spring boot:2.0.1 ======================================== 简单记录一下流程,以供参考: 第一步:首先得有一个spring boot的项目[集成了jpa+mybatis的spring boot 例子:https://github.com/AngelSXD/swapping] 第二步:项目打包为jar包 install成功以后 找到项目根目录下的target目录,这里面的jar就是打包好可以部署的jar

    Jenkins构建Android项目持续集成之findbugs的使用

    题外话 这篇本来和之前的系列要一起出的,但是因为中间公司要发布一个版本,给耽搁了,今天工作做完了,又闲了下来.所以就又来继续jenkins构建Android项目持续集成系列的findbugs篇. Findbugs简介 关于findbugs的介绍,可以自行百度下,这里贴下百度百科的介绍.findbugs是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题.这组缺陷模式是可配置的,通过配置,可以过滤掉一些我们不想或不需要检测的问题. findbugs在gra

    使用docker构建第一个spring boot项目

    在看了一些简单的docker命令之后 打算自己尝试整合一下docker+spring boot项目本文是自己使用docker+spring boot 发布一个项目1.docker介绍 docke是提供简单易用的容器接口Docker 将应用程序与该程序的依赖,打包在一个文件里面.运行这个文件,就会生成一个虚拟容器.程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样.有了 Docker,就不用担心环境问题. 总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入

    自动化测试项目持续集成到jenkins

    之前项目将接口自动化项目持续集成到了jenkins上,这次专门写篇文章记录下. 持续集成时,主要分为以下几个步骤: 1. 服务器安装jdk:2.maven的安装及配置:3.git的安装及配置:4.jenkins的安装及运行:5.将接口自动化项目持续集成到jenkins:6.在线测试报告的产出 一.jdk安装 这个网上有很多教程,本文不再赘述. 二.maven的安装和配置 1. 下载压缩包,使用1.1或者1.2都可以: 1.1 通过自己的电脑将压缩包上传至服务器: a. 进入maven官网下载 b