完整项目持续集成方案 [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_tag
echo '================删除清理容器镜像================'
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 -f
echo '===============启动容器================'
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