实验环境
192.168.10.40部署好GitLab
一、简介
Jenkins 是一个开源的、基于 Java 开发的持续集成和持续交付(CI/CD)工具,广泛应用于自动化构建、测试和部署软件项目。
1、核心特性
(1)持续集成与持续交付(CI/CD)
自动化构建、测试和部署流程
支持多种编程语言和技术栈
可与各种版本控制系统集成
(2)插件生态系统
拥有超过 1,800 个社区贡献插件
支持与 Docker、Kubernetes、AWS 等云技术集成
可扩展与各种测试框架、代码质量工具集成
(3)流水线(Pipeline)支持
使用 Groovy 语法定义复杂构建流程
可视化构建流程 (Blue Ocean)
支持多分支流水线
(4)分布式构建
支持主从架构
可在不同平台和环境中执行构建任务
动态资源分配
2、主要优势
开源免费:完全免费且社区支持强大
跨平台:可在 Windows、Linux、macOS 上运行
易于安装:提供多种安装方式 (WAR包、Docker、系统包等)
可扩展性强:通过插件可满足各种定制化需求
可视化界面:提供直观的Web界面管理构建任务
3、典型应用场景
自动化构建:代码提交后自动触发构建
自动化测试:运行单元测试、集成测试等
静态代码分析:集成SonarQube等代码质量工具
自动化部署:部署到测试/生产环境
定期任务:执行定时构建或备份等任务
二、部署Jenkins(Jenkins)
1、安装JDK
这里Jenkins安装2.504.3,选择安装Java17
(1)卸载自带Java1.8.0
rpm -qa | grep java
dnf -y remove java-1.8.0-openjdk-headless-1.8.0.452.b09-2.el9.x86_64
(2)上传jdk-17_linux-x64_bin.tar.gz包到/root目录,解压并移动到指定位置
tar xf jdk-17_linux-x64_bin.tar.gz
mv jdk-17.0.12/ /usr/local/java
(3)设置环境变量
echo 'export JAVA_HOME=/usr/local/java' >> /etc/profile
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile
加载环境变量
source /etc/profile
(4)查看Java版本
java -version
2、安装Tomcat
(1)下载tomcat源码包,解压并移动到指定位置
wget https://mirrors.aliyun.com/apache/tomcat/tomcat-10/v10.1.43/bin/apache-tomcat-10.1.43.tar.gz
tar xf apache-tomcat-10.1.43.tar.gz
mv apache-tomcat-10.1.43 /usr/local/tomcat
(2)设置环境变量
vim /etc/profile
添加修改:
export TOMCAT_HOME=/usr/local/tomcat
export PATH=$JAVA_HOME/bin:$TOMCAT_HOME/bin:$PATH
加载环境变量
source /etc/profile
(3)启动tomcat服务
startup.sh或catalina.sh start
ss -anplt | grep java
(4)使用浏览器访问
192.168.10.41:8080
3、安装Jenkins
(1)下载jenkins.war包
官方下载地址:https://get.jenkins.io/war-stable/
(2)上传jenkins.war包到/root目录并移动到tomcat的网页目录下
mv jenkins.war /usr/local/tomcat/webapps/
(3)使用浏览器访问Jenkins
192.168.10.41:8080/jenkins
查看管理员登录密码
cat /root/.jenkins/secrets/initialAdminPassword
三、在GitLab创建项目
使用管理员root用户登录GitLab
(1)创建群组
(2)创建项目
(3)推送现有的Git仓库到GitLab(GitLab)
创建Git仓库
mkdir /mygit
cd /mygit/
git init
git config --global user.name "lkai"
git config --global user.email "lkai@qq.com"
echo "test" > test.txt
git add test.txt
git commit -m "add new file test.txt"
生成密钥对
ssh-keygen
查看生成的公钥
cat /root/.ssh/id_rsa.pub
上传公钥到GitLab
推送现有的Git仓库
git remote add origin git@192.168.10.40:dev/my-project1.git
git push --set-upstream origin --all
查看代码
四、Jenkins的使用
1、新建任务并配置、构建
(1)新建任务
(2)查看Git仓库的SSH 协议克隆地址
(3)配置myproject1任务
(4)添加凭据
生成密钥对(Jenkins)
ssh-keygen
查看生成的公钥(Jenkins)
cat /root/.ssh/id_rsa.pub
添加公钥到GitLab
使用Jenkins SSH连接一下GitLab生成known_hosts文件(Jenkins)
ssh 192.168.10.40
查看生成的私钥(Jenkins)
cat /root/.ssh/id_rsa
添加私钥到Jenkins
(5)继续配置myproject1任务
(6)构建
根据构建信息,会将代码存放到/root/.jenkins/workspace/myproject1目录
ls /root/.jenkins/workspace/myproject1
2、使用触发器(Triggers)实现自动构建
(1)触发远程构建
作用:通过 URL 请求或命令行触发构建(无需登录 Jenkins)。
创建身份验证令牌
记录URL:192.168.10.41:8080/jenkins/job/myproject1/build?token=123
访问URL触发构建
使用浏览器访问192.168.10.41:8080/jenkins/job/myproject1/build?token=123
触发构建动作
(2)其他工程构建后触发
作用:当前项目的构建依赖于其他项目的构建结果。
创建任务
配置myproject1任务的触发器
在testproject任务构建
查看myproject1任务状态
因为testproject任务执行构建,所以myproject1任务根据触发器也触发构建动作
(3)定时构建
作用:基于时间表自动触发构建(类似 Cron 任务)。
配置方式:使用 Cron 语法。
配置myproject1任务的触发器
等待一分钟
时间到后,会自动触发构建动作
(4)轮询 SCM
作用:定期检查代码仓库是否有变更,有变更则触发构建。
配置方式:使用 Cron 语法。
与定时构建的区别:
定时构建:无条件按时间触发。
轮询 SCM:仅在代码变更时触发。
配置myproject1任务的触发器
更改代码并提交(GitLab)
cd /mygit/
echo "hello world" >> test.txt
git add .
git commit -m "modify test.txt"
git push origin master
查看myproject1任务状态
更新代码提交后会自动触发构建动作
对比总结
触发器类型 |
触发条件 |
适用场景 |
性能影响 |
触发远程构建 |
外部 HTTP 请求 |
外部系统集成 |
低(按需触发) |
其他工程构建后触发 |
上游项目构建完成 |
依赖链式构建 |
中等 |
定时构建 |
固定时间表 |
定期任务/报表 |
高(频繁无意义构建) |
轮询 SCM |
代码仓库变更 |
无 Webhook 支持的环境 |
中(频繁轮询) |
3、使用 GitLab Webhook 构建 Jenkins 任务
(1)安装GitLab插件
(2)开启 "允许来自 webhooks 和集成对本地网络的请求"
(3)关闭 GitLab 认证
(4)Jenkins任务配置
配置 GitLab 触发器
http://192.168.10.41:8080/jenkins/project/myproject1
生成Secret token(用于身份验证)
5dd5ae69b17e2ce9055c719811af8cdd
(5)GitLab 配置 Webhook
添加 Webhook
测试生成一个推送事件
(6)查看myproject1任务状态
(7)创建代码并推送到仓库(GitLab)
cd /mygit/
echo "hello world" > hello.txt
git add .
git commit -m "add hello.txt file"
git push origin master
(8)查看myproject1任务状态
推送代码后触发构建动作