这部分在Jenkins服务器中操作。
持续集成、持续部署的工具很多,其中Jenkins是一个开源的持续集成平台。
Jenkins涉及到将编写完毕的代码发布到测试环境和生产环境的任务,并且还涉及到了构建项目等任务。
Jenkins需要大量的插件保证工作,安装成本较高,下面会基于Docker搭建Jenkins。
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具
Jenkins应用广泛,大多数互联网公司都采用Jenkins配合GitLab、Docker、K8s作为实现DevOps的核心工具。
Jenkins最强大的就在于插件,Jenkins官方提供了大量的插件库,来自动化CI/CD过程中的各种琐碎功能。
Jenkins最主要的工作就是将GitLab上可以构建的工程代码拉取并且进行构建,再根据流程可以选择发布到测试环境或是生产环境上。
一般是GitLab上的代码经过大量的测试后,确定发行版本,再发布到生产环境。
CI/CD可以理解为:
这里使用第一种方法
# 1. 创建并进入目录
mkdir /usr/local/docker/jenkins_docker -p
cd /usr/local/docker/jenkins_docker
# 2. 拉取镜像,注意版本不能太低,太低的话Jenkins中一部分插件无法下载
docker pull jenkins/jenkins:2.361.2
# 3. 运行
docker run -di --name jenkins \
-p 8080:8080 -p 50000:50000 -u root \
-v /usr/local/docker/jenkins_docker/data:/var/jenkins_home \
--restart always \
jenkins/jenkins:2.361.2
# 4. 配置国内源安装插件
cd /usr/local/docker/jenkins_docker/data/updates
wget https://mirrors.aliyun.com/jenkins/updates/update-center.json
docker pull jenkins/jenkins
# 1. 创建并进入目录
mkdir /usr/local/docker/jenkins_docker -p
cd /usr/local/docker/jenkins_docker
# 2. 编辑yml文件内容
vim docker-compose.yml
version: "3.1"
services:
jenkins:
image: jenkins/jenkins
container_name: jenkins
ports:
- 8080:8080
- 50000:50000
volumes:
- ./data/:/var/jenkins_home/
# 3. 执行
docker-compose up -d
# 修改权限
chmod -R 777 data/
# 重新启动
docker-compose restart
cd /usr/local/docker/jenkins_docker/data
vim hudson.model.UpdateCenter.xml
# 修改数据卷中的hudson.model.UpdateCenter.xml文件
'1.1' encoding='UTF-8'?>
default</id>
https://updates.jenkins.io/update-center.json</url>
</site>
</sites>
# 将下载地址替换为http://mirror.esuni.jp/jenkins/updates/update-center.json
'1.1' encoding='UTF-8'?>
default</id>
http://mirror.esuni.jp/jenkins/updates/update-center.json</url>
</site>
</sites>
# 清华大学的插件源也可以https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
docker restart jenkins
# 通过日志查看密码
docker logs -f jenkins
# 或者进入容器内部查看密码
docker exec -it jenkins
cat /var/jenkins_home/secrets/initialAdminPassword
选择需要安装的插件,这里可以先不用选,进入之后再到插件管理中下载,直接点击安装,就会进入下载界面,如下图。等待一会下载完成
下载完毕设置信息进入首页(可能会出现下载失败的插件,失败也没关系,点击继续就可以,进入之后可以再次安装)
下载插件
来到系统管理—插件管理中—安装下面2个插件(Git Parameter / Publish Over SSH):Git Parameter能够使Jenkins可以从gitlab上拉取代码;Publish Over SSH作用是把构建好的jar包推送到目标服务器,并且发送一个脚本命令告诉目标服务器把当前可运行的目标文件跑起来。
由于Jenkins需要从Git拉取代码、需要本地构建、甚至需要直接发布自定义镜像到Docker仓库,所以Jenkins需要配置大量内容。
准备好GitLab仓库中的项目,并且通过Jenkins配置项目,实现当前项目的DevOps基本流程。
以下命令记录一下,一旦往里面推送了代码,就消失了
git config --global user.name "Administrator"
git config --global user.email "[email protected]"
cd existing_folder
git init --initial-branch=main
git remote add origin http://192.168.2.210/root/mytest.git
git add .
git commit -m "Initial commit"
git push -u origin main
Jenkins需要将Git上存放的源码存储到Jenkins服务所在磁盘的本地
点击立即构建之后,Jenkins就会拉取gitlab上的代码到容器内部
查看任务拉取Git源码日志:查看构建工程的日志,点击上述③的任务条即可
可以看到源码已经拉取到Jenkins本地,可以根据第三行日志信息,查看Jenkins本地拉取到的源码。也就是说Jenkins拉取的源码存放到了这个目录下。
构建成功后,说明源码已经拉取到Jenkins容器内部了,可以进入容器内部/var/jenkins_home/workspace/test查看Jenkins容器中的源码,与gitlab上的保持一致
docker exec -it jenkins bash
cd /var/jenkins_home/workspace/mytest
ls
源码存放位置:容器内/var/jenkins_home/workspace/mytest
代码拉取到Jenkins本地后,需要在Jenkins中对代码进行构建,这里需要Maven的环境,而Maven需要Java的环境,接下来需要在Jenkins中安装JDK和Maven,并且配置到Jenkins服务。
maven能够将从gitlab上拉取的代码进行构建,所以需要在Jenkins上进行配置。
(修改settings.xml文件的步骤在Build阶段工具中进行了配置,参考前面)
/usr/local
下的maven和jdk文件移动到/usr/local/jenkins_docker/data下:# 检查maven文件和jdk文件
cd /usr/local
ls
# 将/usr/local目录下的jdk和maven移动到 /usr/local/docker/jenkins_docker/data 目录下,目的是通过数据卷映射到容器内部
cd /usr/local/jenkins_docker/data
mv /usr/local/maven/ ./
mv /usr/local/jdk/ ./
ls
(Build阶段工具已做) 准备JDK、Maven压缩包通过数据卷映射到Jenkins容器内部/var/jenkins_home/
下。
数据卷存放位置:
(Build阶段工具已做) 解压压缩包,并配置Maven的settings.xml
<mirror>
<id>alimavenid>
<name>aliyun mavenname>
<url>http://maven.aliyun.com/nexus/content/groups/public/url>
<mirrorOf>centralmirrorOf>
mirror>
<profile>
<id>jdk-1.8id>
<activation>
<activeByDefault>trueactiveByDefault>
<jdk>1.8jdk>
activation>
<properties>
<maven.compiler.source>1.8maven.compiler.source>
<maven.compiler.target>1.8maven.compiler.target>
<maven.compiler.compilerVersion>1.8maven.compiler.compilerVersion>
properties>
profile>
【系统管理】——【全局工具配置】——【配置JDK&Maven】
路径为jdk在容器内部的位置,前面操作已经把jdk文件通过数据卷映射到了容器内的/var/jenkins_home/jdk
路径为maven在容器内部的位置,前面操作已经把maven文件通过数据卷映射到了容器内的/var/jenkins_home/maven
这步配置可以让Jenkins调用maven将代码打包成jar包
点击立即构建测试
查看日志可以看到执行了执行的clean packsge -DskipTests 命令:
再进入到Jenkins容器内部查看,可以看到target下的jar包:
cd /var/jenkins_home/workspace/mytest/target
jar包构建好之后,就可以根据情况发布到测试或生产环境,这里需要用到之前下载好的插件Publish Over SSH。
配置Publish Over SSH连接测试、生产环境,这里配置的信息都是目标服务器的信息,目标服务器里必须要有docker
/usr/local/test
,目标目录在【系统管理】——【系统配置】——最下面的【Publish over SSH】中配置过到这里,我们完成了镜像拉取,通过maven构建成jar包,通过publish over ssh 推送到目标服务器的工作。接下来我们还要增加对代码进行检测、推送到harbor仓库等操作。