4. 持续集成工具-Jenkins

一、概述

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集成全流程

  1. 书写并提交代码:开发提交代码至Gitlab
  2. 插件(gitlab) Jenkins安装gitlab所需插件
  3. 创建任务:Jenkins创建freestyle项目,然后配置gitlab仓库项目对应地址。
    3.1 在Jenkins服务器上解析gitlab地址
    3.2 在jenkins上面创建 密钥对 : 公钥发gitlab项目对应的用户, 私钥jenkins web页面添加保存
    3.3 配置gitlab地址和分支
  4. 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上


image.png

私钥配置在jenkins上




注意这里有一些报错,有一个报错没记下来,原因是jenkins服务端我没有安装git造成的




进行构建,查看控制台输出

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容