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造成的




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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容