完整项目持续集成方案 [docker|jenkins|git]

工具

本次持续集成使用到工具有:jenkins、maven、jdk、docker、docker私服【register】、git。

发布流程

本次部署持续集成,将采用两台linux服务器,其中服务器【1】用于部署持续集成工具用于执行项目发布程序,称之为【发布服务器】,服务器【2】用于运行项目,称之为【运行服务器】。

整体的发布流程大致可以抽象成如下三步:

  • jenkins从git仓库中拉取对应的微服务代码,使用maven工具进行编译打包,并构建成微服务镜像
  • jenkins使用linux指令将微服务镜像推送到docker镜像仓库
  • jenkins使用远程linux指令从docker镜像私服仓库拉取微服务镜像到【运行服务器】并运行微服务容器

1 搭建环境

1.1 搭建持续集成环境

持续集成环境的搭建需要用到如下工具:

1、jenkins

Jenkins 是一款流行的开源持续集成(Continuous Integration)工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。

2、JDK

搭建jenkins工具需要JDK环境

3、Maven

jenkins编译打包代码需要用到maven工具

4、Git

jenkins编译的代码需要从git仓库拉取,需要用到git工具

5、Docker

jenkins将打包好的jar需要构建成docker镜像,需要用到docker工具

6、Docker镜像私服仓库

docker镜像私服仓库用于存储docker镜像

1.2 安装JENKINS

安装jenkins需要注意版本的问题,之前安装其他版本的jenkins,一般会jdk版本冲突或插件版本冲突,为了避免版本或插件冲突,可采用jenkins官网推荐的方式安装。

sudo wget -O /etc/yum.repos.d/jenkins.repo \https://pkg.jenkins.io/redhat/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io-2023.key
sudo yum upgrade
# 使用yum安装jdk11版本
sudo yum install java-11-openjdk
# 检验jdk环境是否安装成功
sudo java -version
# 使用yum安装jenkins
sudo yum install jenkins
# 配置开机自启动
sudo systemctl enable jenkins
# 启动jenkins
sudo systemctl start jenkins
# 查看jenkins状态
sudo systemctl status jenkins

安装步骤:

打开浏览器访问{ip}:8080,ip为部署jenkins的服务器【发布服务器】的地址,将会进入jenkins初始化页面

使用如下指令查看初始化密码:

cat /var/lib/jenkins/secrets/initialAdminPassword

将密码复制并填写到输入框中,进入下一步安装插件界面

可选择【安装推荐的插件】或【选择插件来安装】,如果清楚发布流程需要使用到哪些插件可以选择【选择插件来安装】,如果不清楚要装哪些插件,就选择【安装推荐插件】,一般而言推荐的插件基本能满足发布流程。

待插件安装完成后,进入账号密码配置页面,输入账号密码后进入确认实例配置页面

确认了实例URL后选择保存完成。进入如下页面,表示jenkins已正确安装

1.3 安装JDK

下载jdk安装包,可以到官网去下载也可以到百度网盘下载【链接: https://pan.baidu.com/s/1V1O6qgRSFJhdMZ-fD7_cQQ 提取码: 7jic】

将安装包统一放在服务器的【/opt/tool】下

mkdir -p /opt/tool

将jdk安装包上传到【/opt/tool】下并解压到【/usr/tool/jdk11】下

# 创建jdk存放目录
mkdir -p /usr/tool/jdk
# 解压jdk
tar -zxvf /opt/tool/jdk_x64_linux_hotspot_11.0.8_10.tar.gz -C /usr/tool/jdk/
1.4 安装maven

下载maven安装包,可以到官网【https://maven.apache.org/download.cgi】下载也可以到百度网盘下载【链接: https://pan.baidu.com/s/100k7hn6Xm6Vw_7NCmJ68wg 提取码: hfnq 】

将maven安装包上传到【/opt/tool】目录下

# 将maven解压到 /usr/tool 目录下
unzip -o /opt/tool/apache-maven-3.9.1-bin.zip -d /usr/tool/

配置maven环境变量

vi /etc/profile

在profile末尾添加如下内容:

export MAVEN_HOME=/usr/tool/apache-maven-3.9.1
export PATH=$PATH:$MAVEN_HOME/bin

让配置的环境变量生效

source /etc/profile

验证maven是否安装成功

mvn -v

如果提示一下信息说明maven安装成功

创建maven仓库目录

 mkdir -p /usr/tool/maven/repo

修改maven镜像地址

 vi /usr/tool/apache-maven-3.9.1/conf/settings.xml

修改内容如下:

    # 找到<mirrors> 往里面添加如下内容<mirror><id>alimaven</id><mirrorOf>central</mirrorOf><name>aliyun maven</name><url>https://maven.aliyun.com/repository/central</url></mirror># 找到localRepository,去掉注释后,修改为一下内容<localRepository>/usr/tool/maven/repo</localRepository>
1.5 安装Git

yum安装git

yum -y install git

查看是否安装成功

git version
1.6 安装docker

查看centos 内核【版本高于 3.10

uname -r

更新yum源

sudo yum update

如果存在已安装版本,先卸载

sudo yum remove docker docker-common docker-selinux docker-engine

安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

可以查看所有仓库中所有docker版本,并选择特定版本安装

yum list docker-ce --showduplicates | sort -r

安装docker

sudo yum install docker-ce

设置开机启动

sudo systemctl enable docker

启动docker

sudo systemctl start docker

验证安装是否成功

docker version
1.7 安装docker私服

介于已经安装了docker,采用docker来安装docker镜像私服。

拉取registry私服仓库镜像

docker pull registry

拉取docker私服仓库前端控制台

docker pull konradkleine/docker-registry-frontend:v2

运行registry【docker镜像私服】并暴露访问端口5000,该端口为推送docker镜像的端口

docker run -d -p 5000:5000 -v /app/opt/registry:/registry-conf --restart always --name registry registry

运行docker-registry-frontend【docker镜像前端】并暴露端口8091,用户可以访问8091端口进入docker镜像私服管理页面,其中ENV_DOCKER_REGISTRY_HOST为docker镜像私服ip地址,ENV_DOCKER_REGISTRY_PORT为docker镜像私服端口号。运行如下指令之前记得修改上述两个参数值

# ENV_DOCKER_REGISTRY_HOST一定要修改为docker镜像私服ip地址
docker run -d \-e ENV_DOCKER_REGISTRY_HOST=127.0.0.1 \-e ENV_DOCKER_REGISTRY_PORT=5000 \-p 8091:80 konradkleine/docker-registry-frontend:v2

查看是否运行成功

docker ps

显示如下内容表示运行成功

访问 {docker镜像私服ip地址}:8091进入docker镜像私服管理页面,{docker镜像私服ip地址}为部署docker镜像私服前端的IP地址

因为目前版本的registry只支持https协议,需要将客户端ip加入docker白名单

vi /etc/docker/daemon.json

修改如下内容

# 这里的Ip地址为客户端Ip即发布服务器IP
{ "insecure-registries": [ "127.0.0.1:5000" ] }

127.0.0.1为需要推送镜像到docker镜像私服的客户端IP,一定要记得配,否则docker镜像上传不了docker镜像私服

至此已安装完jenkins持续集成的基本工具,下面将介绍如何配置jenkins及如何发布微服务

2 发布流程

2.1 安装jenkins插件

查看一下jenkins是否已经安装了这些插件:Maven Integration plugin【 Maven 集成管理插件】;Docker plugin【Docker集成插件】;GitLab Plugin【GitLab集成插件】;Publish Over SSH【远程文件发布插件】;SSH【脚本执行插件】。

如果发现有缺少对应的插件,到插件管理去安装。

2.2 配置jenkins工具
  • 进入工具配置

  • 配置maven

    使用指令找到settings.xml目录

    # 查看maven家目录在哪
    echo $MAVEN_HOME
    # 显示/usr/tool/apache-maven-3.9.1
    # settings.xml : /usr/tool/apache-maven-3.9.1/conf/settings.xml
    

  • 配置JDK

  • 配置maven目录

  • 配置docker目录

2.3 项目集成maven及docker配置

该项目需要能使用maven进行编译打包,且有对应的dockerfile文件可以构建成docker镜像。

  • 集成maven及docker配置

    在pom.xml文件下配置maven打包插件及dockerfile插件。

    其中dockerfile-maven-plugin的repository地址是docker镜像私服地址。项目打包

    <build><finalName>${project.artifactId}</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.5.4</version><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin><plugin><groupId>com.spotify</groupId><artifactId>dockerfile-maven-plugin</artifactId><version>1.4.13</version><configuration><repository>120.48.130.125:5000/${project.artifactId}</repository><tag>dev</tag><buildArgs><JAR_FILE>target/${project.build.finalName}</JAR_FILE></buildArgs></configuration></plugin></plugins>
    </build>
    
  • 创建dockerfile

    在项目目录下与pom.xml同一级目录创建dockerfile,并填写相关的dockerfile内容。不同的项目dockerfile是不一样的。如不清楚dockerfile该如何写,先学习docker相关知识。下面是举例:

    # 基础镜像
    FROM  openjdk:8-jre
    # author
    MAINTAINER pango# 挂载目录
    VOLUME /home/pango
    # 创建目录
    RUN mkdir -p /home/pango
    # 指定路径
    WORKDIR /home/pango
    # 复制jar文件到路径
    COPY ./target/pango-auth.jar /home/pango/pango-auth.jar
    # 启动认证服务
    ENTRYPOINT ["java","-jar","pango-auth.jar"]
    

    存放目录:

2.4 将项目提交给代码仓库
  • 创建项目代码仓库

  • 提交代码到代码仓库

    1、进入项目目录

    2、 初始化git

    git init
    

    3、添加项目代码到本地仓库

    git add ./
    

    4、提交到远程仓库

    git commit -m "init"
    

    # origin后为项目代码仓库地址
    git remote add origin https://gitee.com/***/pango-auth-deploy.git
    git push -u origin "master"
    

2.5 Jenkins项目打包及构建docker镜像

发布流程:1.拉取git项目代码 -> 2.maven打包成jar包 -> 3.dockerfile构建成镜像 -> 4.提交镜像到docker镜像私服 -> 5.远程ssh从docker镜像私服拉取镜像到发布服务器-> 6.运行发布服务器中的项目镜像

  • 创建自由风格项目

  • 配置镜像标签变量

    镜像标签变量 将会在发布项目容器的时候会用到

  • 配置git仓库

    添加git仓库凭证

    输入git仓库账号密码

    输入项目git仓库地址->选择账号->选择分支

  • 构建maven步骤

    选择maven->输入maven指令【清除并安装jar到私有仓库、通过dockerfile构建镜像】

    clean install dockerfile:build -Dmaven.test.skip=true
    

  • 执行构建,查看结果

    构建项目

    查看执行过程

    如果出现权限异常

到发布服务器找到maven本地仓库,授权。其中/usr/tool/maven/repo为maven仓库,授权完成后重新构建

chmod 777 /usr/tool/maven/repo

并docker相关目录授权

chmod -R 777 /var/run/docker.sock

编译构建成功后

进入jenkins工作空间查看项目是否已下载

cd /var/lib/jenkins/workspace
ls

查看项目docker镜像是否构建成功

docker images
2.6 推送项目docker镜像到docker镜像私服

到发布项目下继续添加构建步骤

找到Build Steps ,在maven配置后面添加【执行 Shell】

并添加如下shell脚本,其中$image_tag 表示引用变量

echo '================docker镜像推送================'
docker push $image_tag
docker rmi $image_tag
echo '================docker tag 清理 ================'

2.7 远程执行发布项目镜像容器

配置远程服务器链接

在 Manage Jenkins -> System下 找到【SSH remote hosts】填写远程服务器IP、端口号及账号密码

在Build Steps下,【执行shell】步骤后添加远程执行shell步骤

并填入如下shell指令,其中$image_tag为配置好的变量,name=pango-auth-dev 容器名称,–name pango-auth-dev 容器名称

docker镜像私服IP:5000/pango-auth:dev docker镜像私服项目镜像

echo '================拉取最新镜像================'
docker pull $image_tagecho '================删除清理容器镜像================'
if [ -n  "$(docker ps -a -f  name=pango-auth-dev  --format '{{.ID}}' )" ]then#删除之前的容器docker rm -f $(docker ps -a -f  name=pango-auth-dev  --format '{{.ID}}' )
fi# 清理镜像
docker image prune -fecho '===============启动容器================'
docker run -d   --net=host -e PARAMS="--spring.profiles.active=dev" --name pango-auth-dev docker镜像私服IP:5000/pango-auth:dev

3 构建项目

在构建项目之前,需要确认【运行服务器】已安装docker。如没安装请按照1.6章节进行docker安装。

到部署服务器上查看项目是否启动成功,

# 查看是否存在项目镜像
docker images# 查询项目镜像是否运行成功
docker ps

完整项目持续集成方案相关推荐

  1. Web前端持续集成方案(四)

    五.利用jenkins实现web前端项目持续集成 上文中,我们已经介绍了利用grunt检测并打包web前端项目的方案.下面我们结合jenkins介绍 web前端项目持续集成方案. Grunt已经完成了 ...

  2. JAVA一条龙持续集成方案(完整步骤+脚本+配置)

    自建自动化持续集成方案 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 文章目录 自建自动化持续集成方案 前言 一.组成部分 二.流程步骤 1. 流程图 2. 安装组件 1. 安装G ...

  3. 【狂云歌之unity_vr】unity项目持续集成dailybuild以及多平台打包管理

    [狂云歌之unity_vr]unity项目持续集成dailybuild以及多平台打包管理 前言  持续集成的意义就不多说了.unity通常打包一般就直接build&run,但是在实际项目中,往 ...

  4. 【狂云歌之unity_vr】unity项目持续集成cibuilddailybuild

    [狂云歌之unity_vr]unity项目持续集成dailybuild以及多平台打包管理 前言  持续集成的意义就不多说了.unity通常打包一般就直接build&run,但是在实际项目中,往 ...

  5. k8s和harbor的集成_爱威尔-基于kubernetes集群的项目持续集成(gitlab+harbor+Jenkins)安装...

    这个算是基于kubernetes集群的项目持续集成的前导篇,先把这用环境搭建好我们后面就可以专注做基于k8s的docker化项目持续集成了. gitlab安装 https://about.gitlab ...

  6. Centos+Gitlab+Jenkins 针对.NET项目持续集成环境搭建和自动化部署

    目录 一.前言 二.系统环境 三.Gitlab安装 3.1 安装依赖软件 3.2 开启postfix 3.3 安装Gitlab 3.4 设置服务器IP和端口 3.5 重置并启动GitLab 3.6 浏 ...

  7. Jenkins+Docker+Spring+Java项目持续集成(单机版)

    1.大致流程 流程说明: 1)开发人员每天把代码提交到 Gitlab 代码仓库 2)Jenkins 从 Gitlab 中拉取项目源码,编译并打成jar包,然后构建成 Docker 镜像,将镜像上传到 ...

  8. 使项目持续集成支持Carthage管理

    2019独角兽企业重金招聘Python工程师标准>>> Travis CI是什么? Travis CI是在线托管的CI服务,用Travis来进行持续集成,不需要自己搭服务器,在网页上 ...

  9. jenkins部署流程图_一文教你使用 Jenkins 设计多环境、多项目持续集成环境!

    自动化部署主要是为了解决项目多.环境多.持续集成慢.部署操作麻烦.手动操作易出错.自动化运维等问题. Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建.部署.自动化 ...

最新文章

  1. H3C 交换机S6520X软件版本升级
  2. java frame 显示图片_java 图像显示
  3. linux 内核维护,Linux 4.18内核系列生命周期结束:用户需尽快更新内核
  4. mysql打开sql语句日志
  5. __macosx_在5分钟内在MacOSX Lion中设置JAVA_HOME,MAVEN_HOME,ANT_HOME
  6. 从底层重学 Java 之四大整数 GitChat链接
  7. django解决NameError: name ‘_mysql‘ is not defined 或 mysqlclient 1.4.0 or newer is required报错
  8. Linux-5.10.13内核完全注释之工作队列
  9. 大数据时代 银行信息安全如何防护?
  10. PHP 输入/输出流
  11. keil删除工程_RTT 是如何管理和构建工程的?
  12. 今天我必须要全网曝光这几个公众号
  13. (day 07 - dfs or bfs)剑指 Offer 13. 机器人的运动范围
  14. VBA技能:取整函数的使用
  15. web项目 压力测试
  16. android页面监听扫描枪,Android监听扫描枪内容(二)
  17. 简单盘点游戏开发引擎
  18. Spark Streaming背压机制
  19. Excel作图-显示多层分类轴标签
  20. 国服最强王者之最良心王者

热门文章

  1. 分组统计group by
  2. 用adb工具给智能电视安装应用(在电视没法安装应用的情况下可用)
  3. 程序员去外包公司有前途吗?
  4. 判断本机IP地址是公网地址还是私网地址
  5. 我比较笨,我得一步一步来
  6. proc文件系统下各参数解析
  7. html去图片平铺效果,HTML图片怎么平铺
  8. 【转】阿里云Linux系统被攻击的处理过程
  9. 如何解决PDCA空转现象?
  10. @RequestBody接受单个long参数