一、概述
1.1 什么是Jenkins
- Jenkins 是一个开源持续集成的工具,是由JAVA 开发而成。
- Jenkins 是一个调度平台,本身不处理任何事情,调用插件来完成所有的工作。
1.2 Jenkins作用图
二、Jenkins快速部署
Jenkins部署可参考Jenkins官方安装文档
2.1 安装JDK环境
[root@jenkins ~]# yum -y install java
[root@jenkins ~]# rpm -qa java-1.8.0-openjdk
java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64
2.2 部署Jenkins(LTS版)
#下载jenkins源
[root@jenkins ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo --no-check-certificate
[root@jenkins ~]# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
#安装jenkins
[root@jenkins ~]# yum install jenkins -y
[root@jenkins ~]# rpm -qa jenkins
jenkins-2.319.3-1.1.noarch
#启动jenkins并设置开机自启
[root@jenkins ~]# systemctl start jenkins
[root@jenkins ~]# systemctl enable jenkins
jenkins.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig jenkins on #这里并没有报错,只是说明jenkins通过chkconfig设置开机自启
2.3 jenkins目录结构
[root@jenkins ~]# rpm -ql jenkins
/etc/init.d/jenkins #jenkins启动与停止脚本
/etc/logrotate.d/jenkins #jenkins日志切割配置文件
/etc/sysconfig/jenkins #jenkins配置文件
/usr/lib/jenkins #jenkins的war包目录
/usr/lib/jenkins/jenkins.war #war包(升级jenkins替换war包即可)
/usr/sbin/rcjenkins #jenkins启动与停止脚本(软链接)
/var/cache/jenkins #jenkins缓存目录
/var/lib/jenkins #jenkins主要配置,插件目录
/var/log/jenkins #日志文件目录
2.4 Jenkins主配置文件
[root@jenkins ~]# egrep -v "^$|^#" /etc/sysconfig/jenkins
JENKINS_HOME="/var/lib/jenkins"
#jenkins配置、插件目录
JENKINS_JAVA_CMD=""
#运行Jenkins的JAVA可执行文件
JENKINS_USER="jenkins"
#运行jenkins的用户
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"
#运行Jenkins时传递给java的选项
JENKINS_PORT="8080"
#jenkins监听的端口
JENKINS_LISTEN_ADDRESS=""
#jenkins监听的ip,默认0.0.0.0
JENKINS_HTTPS_PORT=""
JENKINS_HTTPS_KEYSTORE=""
JENKINS_HTTPS_KEYSTORE_PASSWORD=""
JENKINS_HTTPS_LISTEN_ADDRESS=""
#这四项都是https的配置
JENKINS_HTTP2_PORT=""
JENKINS_HTTP2_LISTEN_ADDRESS=""
#http2的配置
JENKINS_DEBUG_LEVEL="5"
#日志运行级别,越大显示与详细
JENKINS_ENABLE_ACCESS_LOG="no"
#访问日志
JENKINS_HANDLER_MAX="100"
#HTTP工作线程的最大数量
JENKINS_HANDLER_IDLE="20"
#最大空闲HTTP工作线程数
JENKINS_EXTRA_LIB_FOLDER=""
#将jar文件添加到Jetty类加载器的文件夹,默认关闭
JENKINS_ARGS=""
#添加任意的参数到jenkins
2.5 解锁jenkins
浏览器访问10.0.0.76:8080
[root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
d0648f37d6324b118484ad5ca1c50313 #将次内容复制到上图的管理员密码中继续
开始使用时先修改以下密码
用户名:admin
密码:12345678
2.6 安装插件
三种安装方式:
1. 联网安装 通过互联网下载插件
1) 需要知道插件名称 ( 需要知道要集成哪些软件或服务; )
2) 在哪个位置进行插件安装 Manage Jenkins --> Mange Plugins
注意:
1) 安装会比较的慢;需要等很久;
2) 如果出现警告,要看提示; 不要盲目升级,很容易造成 Jenkins连带升级, 会出现其他很多插件无法使用;
2. 下载 .hpi 文件安装
https://mirror.tuna.tsinghua.edu.cn/jenkins/plugins/git/latest/git.hpi
3. 导入插件
将此前已经安装好的插件; 备份下来; 然后恢复;
问题: 插件存储在哪个路径下: /var/lib/jenkins/plugins/
三、jenkins与shell集成
通过运行jenkins选择
dev #开发环境
prod #生产环境
jenkins执行脚本
case "$env" in
dev) echo "部署到测试环境" ;;
prod) echo "部署到生产环境" ;;
esac
四、jenkins与gitlab集成
4.1 与gitlab集成全流程
- 书写并提交代码:开发提交代码至Gitlab
- 插件(gitlab) Jenkins安装gitlab所需插件
- 创建任务:Jenkins创建freestyle项目,然后配置gitlab仓库项目对应地址。
3.1 在Jenkins服务器上解析gitlab地址
3.2 在jenkins上面创建 密钥对 : 公钥发gitlab项目对应的用户, 私钥jenkins web页面添加保存
3.3 配置gitlab地址和分支 - web:jenkins构建
4.2 全流程实施
这里使用gitlab上的zhibo.html代码
安装插件
Git client plugin #git 客户端插件为 Jenkins 插件提供了 git 应用程序编程接口 (API)
Git plugin #git 插件为 Jenkins 项目提供了基本的 git 操作
GitLab Authentication plugin #GitLab OAuth 插件提供了一种通过将身份验证和授权卸载到 GitLab 来保护 Jenkins 实例的方法
GitLab Plugin #此插件允许 GitLab 在提交代码或打开/更新合并请求时触发 Jenkins 中的构建。
Credentials Plugin #在jenkins中存储认证的凭证
Generic Webhook Trigger #允许gitlab自动触发jenkins构建项目
在jenkins上配置gitlab的域名解析
[root@jenkins ~]# echo "10.0.0.75 gitlab.xiaoyu.com" >> /etc/hosts
jenkins与gitlab密钥验证
#在jenkins上生成密钥对
[root@jenkins ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:1TKJUJ0JIjyF0DAJzYdMAdm01S4khByDxJNfmFDFZ50 root@jenkins
The key's randomart image is:
+---[RSA 2048]----+
|B^&XB=+.+o.o |
|+=X*B+.= E+o |
| ++.oo . = . |
| .. . . o |
| . S |
| |
| |
| |
| |
+----[SHA256]-----+
[root@jenkins ~]# cat /root/.ssh/id_rsa.pub #这个是公钥
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCVxy+TIG7OqUiPSXsoxrQD/A7awoVx7vta5eepZO8BdRjsVsws1JbLCJ7wvGZro+vhLikNkAMlcs7YFpvLYr9T3IfIr4tk7BP1BzMu+umuhGDoB5HF3orBDgcDIwyqVkGlg7pAP89fnwCrYAcQ9Q9/hGRpLeKFCAma6br3UTVQXg84zZAkv4fAamtL88/chiAGcLdRAxNbghHXsRbuUpALNXMC7xfBjDbcrn499hClKFfzM5PRST/ZYgncaLvDLiBNSykZb6mXUwMdwgh0ZCcfv2Ab2uGz2ITOvuV7vs9QIis9SBZ+zutlyTqhNJz/oyFkx98Jgdtcl7eyy/f4zsIH root@jenkins
[root@jenkins ~]# cat /root/.ssh/id_rsa #这个是私钥
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAlccvkyBuzqlIj0l7KMa0A/wO2sKFce77WuXnqWTvAXUY7FbM
LNSWywie8Lxma6Pr4S4pDZADJXLO2Baby2K/U9yHyK+LZOwT9QczLvrproRg6AeR
xd6KwQ4HAyMMqlZBpYO6QD/PX58Aq2AHEPUPf4RkaS3ihQgJmum691E1UF4POM2Q
JL+HwGprS/PP3IYgBnC3UQMTW4IR17EW7lKQCzVzAu8XwYw23K5+PfYQpShX8zOT
0Uk/2WIJ3Gi7wy4gTUspGW+pl1MDHcIIdGQnH79gG9rhs9iEzr7le77PUCIrPUgW
fs7rZck6oTSc/6MhZMffCYHbXJe3ssv3+M7CBwIDAQABAoIBAFh3vJwUjh63Usp/
xqVBKNcprMR+HUA8vm7kWT9vBNVBiyUd55+bOi5WuzrKrVxrCEqLb2g5ZgJam957
DC7H9ubb3cAmIBnOb8NNK2hWgGy6eFrVDb9oQWDinjW2ICcEp+XRttN4XU7HpieT
otjbRvo1AvI1ThTxuGquH+cxKmJ7JQJCcVK2fT7U2O2abdXurOmZt2eMZWxpv26B
U2MNo9RTfRL9/TovXoy6PCXelaeUwG+mNIbvzqbp0P/QJIbUl71eLvC2NF3eMQG3
y1dCKJ5pqpVJRqE4dQPtfAdQebXCb79Tx7OYPrnADYKWi3EzZBnfLDqHxyglGNHI
0Sn0V0ECgYEAxVub7c2yGzS8sYjOn5pRrFXQ2rOlDBvpe+b568rczfs2dnKK/8CD
e/YRQitmOSkvvFfddB+m7/rMsomC40RYfAgEGbfMaR5t2cDlSoU3KcZ7vyNflee8
LFiTtCx43lAutM8UAF6iZsOxmzvEy16efQA9055V8ZkcjN4lpUeZd1ECgYEAwkhV
JnPVrKH9v3W/afNRfemIv5L1lcJb+CwZBPAOB5F5rhnVluKfTz/PFGspZ7tjyFK3
6BT2mCXYTsgrj4SiMyhJFOrbDCyI2P+waakyhOdlFdxSvnfgd6Wzn/UvDXz+caTf
N9Fe1G3UOZm1MSO+cLHrXWzdT03r+8PGZ4TZfdcCgYA+3zZHhbXtsNlD/X9FnRXT
vurwITa9Ks8w555Kna/F9vecuFTLsPqyLOvGlqjUIOjSKXOlIMg/vzgi0GfgGs/N
g4g64TC/dDAupKLnIJU4O8EEXTKAQPjTb8xuI5TFzelzNFz82SkHb+ROvbWtzBDV
ZZRMrC5Y7xwHTGXVx39+YQKBgDk0lSXyW4suU4npgMgQpgEeH27RNdC33t6vFVrX
2DmwQxTZdIOuDNyH3FCV0SZDDflxKceDTKy2D//6fqEOm7fWd9ZZ5M+r2UuT1fz2
nfJ2M9SBADgnEggI2WATEJy3HjCWLEfCNVr1T9T6BlkGvk9ug/AJWwy70+1Y0vWu
L2AXAoGAIIg3j3awtS/JT4G745isOFEjgh6p3IvyiGRyQ7rh5BOwfcsUuk5rXWig
JL8PU6Ih4026n+TI8ZNDDj0tQmGF/3xzBPqF1K2nze/TsnR0cY0UXOhHFSuAEd3b
O/MBiaXa/0ezRYU2h4uqPT3tn6DQ/1D5ZDUoQ/Mzem95RJNFzl0=
-----END RSA PRIVATE KEY-----
将公钥放到gitlab上
私钥配置在jenkins上
注意这里有一些报错,有一个报错没记下来,原因是jenkins服务端我没有安装git造成的
进行构建,查看控制台输出