CI/CD之Jenkins+Gitlab(二)

简介: CI/CD之Jenkins+Gitlab(二)

-创建一个新账户

b44c142f66dc430aa38fba8828e9b81f.png

2ba433654e77495389cdb1c4be8f5f74.png

a480e032c85848568eed6f757d5dee91.png

4516d9444ba049898e4964f1aa3407ff.png3a78a17f5747483594986f0a4440794c.png

bf9fcec9d67b47a4aba0bbeae93f644f.pnga79edcbb52aa465bb43cbeb1fb3f6564.png


使用新账户登录gitlab

1b03c6acf31b4eb09cbcc144ee51e3bd.png

可以很明显看到,普通用户的权限是没有root多的


7d04c8ee27a549969e6a43f52b3838b2.png

-把新创建的用户加入组

e6e95946c20842839aa1abd68af15d25.png

8bc00829174f4ac2aae40123ae32f8b2.png

75b7bbbe44ed4df58ab3c188eac8e632.png

9d883903358b4cfa8a8176207d675de1.png

#Gitlab用户在组中有五种权限:Guest、Reporter、Developer、Master、Owner
Guest(访客):可以创建issue、发表评论,不能读写版本库
Reporter(报告者):可以克隆代码,不能提交,QA(测试人员)、PM(主管或者产品经理)可以赋予这个权限
Developer(开发人员):可以克隆代码、开发、提交、push,RD(研发人员)可以赋予这个权限
Master(主程序员):可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心RD负责人可以赋予这个权限
Owner(所有者):可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员,开发组leader可以赋予这个权限

-创建一个新项目


可以在群组中创建项目,也可以创建私有的项目,创建完后的使用方法和github相同

81873ff4aabf4ea1a5302d04546a4c02.png

007168263c754ff9a3495b295e9a061c.png

ffde7e4061c74a79b3f3b1cceb3f8cfe.png

这里之后都汉化了,下面生成ssh密钥


d355e8bc4bed4101b5636488fb573fc5.png

#因为是要配合jenkins,所有这里使用的密钥直接在jenkins主机上操作即可
[root@Centos7 ~]# hostnamectl set-hostname jenkins
[root@Centos7 ~]# su
[root@jenkins ~]# ssh-keygen -t rsa
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:gh6chv+S4eK5Tnd8mWzbQNTmWdi4BLK9/H/VrA1Qenk root@Centos7.4-1
The key's randomart image is:
+---[RSA 2048]----+
|      . .        |
|       + o +  .  |
|      . o * oo . |
|   o o o = +o o E|
|  . * . S +  o o.|
|   +.o + +    . +|
|  ..+oo B .    = |
| ..o+o o + .  o .|
| o=o .. . . ..   |
+----[SHA256]-----+
[root@jenkins ~]# cat .ssh/id_rsa.pub   #查看公钥并且复制到gitlab的web界面中
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDcUghkjbif7vFFzmUfeWaon08+VDF314si8Fa0xonE3dFbpfr1tzSLmldaulj8yBwXvvtS7XKJUuh54gqgQycor/T1apfyfPSLHtCoeZWYzbACufm9penKCA0USkYwTkOQU9HpOx17p85nBO6ydo6Xz0l8UBNqvoy7/tO7mIslcignj+r6mgskTxCoOk9ujwDSQ3QmfhLmc/7B4wGSWclvETZyRGyb8g3rye7+16fpPENpq1YaweoiNAytdb+IZBVjgdIT0k2PVggVdYxntoA0IulCYwolT1KcjJllcSm47IHtDL4J8AgPGO8ZXf7oJM+vMtZRiHlURjLlQzbcAnOh root@Centos7.4-1

64d506de2d484d2cad423227a0a6d09d.png

c512b9d96dbd469490ef3be3e5941a9a.png

ec863c775f854876992617a98ce4c6a4.pngf927c1d9a43a4c209554a4bb396a3b9e.png4cb1e0f7df204a4da1baa70811df454d.png15072fc7020b4ef789e7513dad8f5807.png

cd05d530b64b44c589ca65557c78aa2c.png

0df79ce3ccf242228655bfdc7727bb98.png


使用jenkins主机复制一下仓库

[root@jenkins ~]# git clone git@192.168.100.202:root/test.git  #克隆,后面的URL直接在web界面复制就行
正克隆到 'test'...
The authenticity of host '192.168.100.202 (192.168.100.202)' can't be established.
ECDSA key fingerprint is SHA256:VhTZ5YxS5af2rHtfCvyc6ehXh3PD2A8KY2MyE6rHjiU.
ECDSA key fingerprint is MD5:e8:41:d2:8a:7e:e9:a9:47:a3:f0:29:be:e9:6d:df:51.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.100.202' (ECDSA) to the list of known hosts.
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
接收对象中: 100% (3/3), done.
[root@jenkins ~]# ll
总用量 4
-rw-------. 1 root root 1264 1月  12 18:27 anaconda-ks.cfg
drwxr-xr-x  3 root root   32 6月  30 18:57 test
[root@jenkins ~]# cd test/
[root@jenkins test]# ll    #成功克隆仓库
总用量 4
-rw-r--r-- 1 root root 16 6月  30 18:57 1.html

-搭建Jenkins(100.203)


  • Jenkins下载地址


https://pkg.jenkins.io/redhat-stable/jenkins-2.176.2-1.1.noarch.rpm


  • linux的wget下载地址:


wget https://pkg.jenkins.io/redhat-stable/jenkins-2.176.2-1.1.noarch.rpm


******(1)先做基础配置
[root@jenkins ~]# systemctl stop firewalld
[root@jenkins ~]# setenforce 0
setenforce: SELinux is disabled
[root@jenkins ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
mount: /dev/sr0 已经挂载或 /mnt 忙
       /dev/sr0 已经挂载到 /mnt 上
******(2)因为Jenkins是使用JAVA开发,所以需要安装JDK
[root@jenkins ~]# ls  #上传jdk包
anaconda-ks.cfg  jdk-8u91-linux-x64.tar.gz  test
[root@jenkins ~]# tar xf jdk-8u91-linux-x64.tar.gz -C /usr/local/
[root@jenkins ~]# mv /usr/local/jdk1.8.0_91 /usr/local/java
[root@jenkins ~]# ls /usr/local/
bin  etc  games  include  java  lib  lib64  libexec  sbin  share  src
[root@jenkins ~]# vim /etc/profile
。。。。。。   #在最后一行添加,优化环境变量
JAVA_HOME=/usr/local/java 
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar 
export PATH JAVA_HOME CLASSPATH
#保存退出
[root@jenkins ~]# source /etc/profile  #执行脚本,使刚刚的配置生效
[root@jenkins ~]# java -version  #查看java版本,确认成功安装
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
******(3)上传Jenkins软件包,安装、配置
[root@jenkins ~]# ll
总用量 241624
-rw-------. 1 root root      1264 1月  12 18:27 anaconda-ks.cfg
-rw-r--r--  1 root root 181367942 6月  30 22:11 jdk-8u91-linux-x64.tar.gz
-rw-r--r--  1 root root  66044542 6月  30 22:16 jenkins-2.222.4-1.1.noarch.rpm
drwxr-xr-x  3 root root        32 6月  30 18:57 test
[root@jenkins ~]# yum -y install jenkins-2.222.4-1.1.noarch.rpm   #安装Jenkins
。。。。。。
完毕!
[root@jenkins ~]# vim /etc/sysconfig/jenkins   #修改配置文件
。。。。。。
 28 #
 29 JENKINS_USER="root"    #把jenkins的用户改成root,因为上传密钥到gitlab的用户是root
 30 
。。。。。。
#保存退出
[root@jenkins ~]# ln -s /usr/local/java/bin/java /usr/bin/  #添加java的软连接
[root@jenkins ~]# /etc/init.d/jenkins start    #启动jenkins
Starting jenkins (via systemctl):                          [  确定  ]
[root@jenkins ~]# netstat -anpt | grep 8080    #默认监听的端口是8080
tcp6       0      0 :::8080                 :::*                    LISTEN      15122/java  
[root@jenkins ~]# chkconfig jenkins on   #添加开机自启
[root@jenkins ~]# chkconfig --list jenkins
注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。 
      要列出 systemd 服务,请执行 'systemctl list-unit-files'。
      查看在具体 target 启用的服务请执行
      'systemctl list-dependencies [target]'。
jenkins         0:关 1:关 2:开 3:开 4:开 5:开 6:关

-访问Jenkins并且安装相关插件


(1)解锁jenkins


使用浏览器访问http://192.168.100.203:8080即可,会出现解锁页面,并且提供了密码保存的路径,打开文件输入密码就行

4c8238d194ea41319f0e3b06f454a600.png


[root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword   #查看后,复制到web界面里
820ee2b087484685b4b04ebb5d834c34

69c4719a93a646bda9ab4006ae0d41a4.png

#注意:由于jenkins需要联网下载插件,默认插件的网址是jenkins的官网(速度特别慢),因此需要给jenkins更换插件的下载源
#更换插件下载源步骤如下:
1、上图不要点继续、并且给Jenkins服务器断网
2、断网之后,再点继续
3、如下图,选择跳过插件安装

989e1a9e2f6e4916b166d84209b5ff2a.png

06fcba278e77442bbf7cac2a817cd7b6.png

dbf74f18a1524ac687ce0e7a71dec850.png

(2)登录Jenkins

182413fb64394b55a141f3fd7065061b.png

358c90e3edb3407182a761325228f779.png


-安装Jenkins插件


Jenkins的插件可以手动安装也可以联网安装


  • 联网安装


Jenkins默认的插件源下载的特别慢,所以我们可以修改插件源


(1)给jenkins服务器联网,重新启动jenkins


[root@jenkins ~]# /etc/init.d/jenkins restart


(2)登录Jenkins

5e00ba11adae40efba261e0a5d9149f8.png

(3)选择Manage Jenkins----->Manage Plugins------>Advanced------->向下滑


将以下连接https://updates.jenkins.io/update-center.json替换为

http://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

2b41046a9f6a4a33a8a1bd9e17198cf1.png

(4)回到jenkins服务器,进行以下操作

[root@jenkins ~]# cd /var/lib/jenkins/updates/
[root@jenkins updates]# sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

到此为止,插件源修改完成


手动安装


如果联网安装插件失败或者是在无网络的环境下安装插件,可以选择手动安装,可以在web界面去安装也可以去linux系统中安装


web界面安装:


这个插件下载需要在有网的情况下,下载好了,再上传至服务器,直接点击选择文件就行


下载地址: http://updates.jenkins-ci.org/download/plugins/,下载完成之后,上传就行

6cea5c10fa104bf3adeff873d65c33bd.png

908d2fc1a0a74e4ba32b8de52b3e847b.png

linux命令行安装:

[root@jenkins ~]# ls    #上传plugins.tar.gz插件包
anaconda-ks.cfg  jdk-8u91-linux-x64.tar.gz  jenkins-2.222.4-1.1.noarch.rpm  plugins.tar.gz  test
[root@jenkins ~]# rm -rf /var/lib/jenkins/plugins   #删除原来的插件包
[root@jenkins ~]# tar xf plugins.tar.gz -C /var/lib/jenkins/   #直接解压到jenkins目录中
[root@jenkins ~]# systemctl restart jenkins  #重启服务,不重启无法使插件生效

直接替换/var/lib/jenkins下的plugins插件包目录,然后重启,可以上传的最好是有中文的插件包,之后修改这个为zh_CN重启jenkins会变成中文

f374fd26e8604d23bcb74e145912b117.png

-Jenkins升级

******(1)查看jenkins的war包所在的目录
[root@jenkins ~]# rpm -ql jenkins
/etc/init.d/jenkins
/etc/logrotate.d/jenkins
/etc/sysconfig/jenkins
/usr/lib/jenkins
/usr/lib/jenkins/jenkins.war    #这个就是war包所在目录
/usr/sbin/rcjenkins
/var/cache/jenkins
/var/lib/jenkins
/var/log/jenkins
******(2)下载最新稳定的war包
#下载地址:wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war/latest/jenkins.war
#这里直接上传了
[root@jenkins ~]# systemctl stop jenkins  #先关闭服务
[root@jenkins ~]# cd /usr/lib/jenkins/
[root@jenkins jenkins]# mv jenkins.war jenkins.war.bak   #把原来的war包备份
[root@jenkins jenkins]# ll    #上传新的war包
总用量 133996
-rw-r--r-- 1 root root 70969355 6月  30 23:57 jenkins.war
-rw-r--r-- 1 root root 66239216 5月  28 2020 jenkins.war.bak
[root@jenkins jenkins]# systemctl start jenkins   #启动服务
[root@jenkins jenkins]# netstat -anpt | grep 8080    #确认启动
tcp6       0      0 :::8080                 :::*                    LISTEN      15538/java     

登录web界面验证

243425cda86d4787852d2364520594d8.png

可以很明显的看到ui变了,成功升级jenkins

37ebf7603d0144929c81c80681c839d8.png

-配置jenkins使用gitlab更新代码


需要用到下面的插件

 #有的已经默认安装,可以在已安装的上面的搜索栏中搜索一下确认
 Credentials (默认已经安装)   #签名证书管理插件
 Gitlab                       #安装后从gitlab获取代码
 Git 和 Git Client (默认已安装)#用于jenkins在gitlab 中拉取源码
 GitLab Hook                  #gitlab触发jenkins构建项目 
                              #hook [hʊ ʊk] 钩子; plugin ['plʌ ʌgɪ ɪn] 插件
 Gitlab Authentication        # gitlab 和 jenkins 认证相关的插件
 SSH Plugin                   #进程执行shell 脚本
 Publish Over SSH             #用于通过 ssh部署应用

e93ef28bd97b4f2fbfba6969ca337802.png

44721811e8554d5ca18e76c2e705a9d6.png


没有可选插件可能是因为版本问题,可以先往下做


上面已经把jenkins主机root用户的公钥传到了gitlab上,并且同步gitlab的仓库也已经成功,下面只需要把jenkins主机root用户的私钥传到jenkins的web界面上,这样jenkins就可以直接免密拉取gtilab的仓库了

[root@jenkins ~]# cat .ssh/id_rsa  #查看私钥并复制
-----BEGIN RSA PRIVATE KEY-----
MIIEpgIBAAKCAQEA3FIIZI24n+7xRc5lH3lmqJ9PPlQxd9eLIvBWtMaJxN3RW6X6
9bc0i5pXWrpY/MgcF777Uu1yiVLoeeIKoEMnKK/09WqX8nz0ix7QqHmVmM2wArn5
vaXpyggNFEpGME5DkFPR6Tsde6fOZwTusnaOl89JfFATar6Mu/7Tu5iLJXIoJ4/q
+poLJE8QqDpPbo8A0kN0Jn4S5nP+weMBklnJbxE2ckRsm/IN68nu/ten6TxDaatW
GsHqIjQMrXW/iGQVY4HSE9JNj1YIFXWMZ7aANCLpQmMKJU9SnIyZZXEpuOyB7Qy+
CfAIDxjvGV3+6CTPrzLWUYh5VEYy5UM23AJzoQIDAQABAoIBAQCcVtW/zNVLIDoz
Z89YM0SGuW149DOaL+h6pYNRimTuvty2JSTdQeDWg3IjXoKQ9csBirM62GXjTmLL
Qnx51s0t0RaJI9eo6cR6CCbWtlhScvrIJII0ckxg4a+uSzpdQtwsyV32G83DFoOf
lN9w4jIzRZOG1CfDIm4pZR2ITCnJKlRv+hL4gGDTEh3oFQHMJZwxA6qiwXqmRxJ+
jUNP9S2LHl2Zsz3QwTHCsdHUoJisLz348M9bjia5Kn7i/kJONdk3inxBTWhxX9sA
j/GDTO++H4bklRgtJuB+hL7wpYuL5T/dK0VShtWTZVQQZTycPNsmBEf6XYYx37K2
07ZRyCjBAoGBAPNBuWYP1RgIShVBaQsEXjWdP+4orN9cDvvueMKroCkg7QGv2m0v
SDmpKWkhLNurnd3QoqyW1Q1w0+iw1QOKmjmHxo95tu3ieNAQ5TOK8fAiEA996zpC
DiADVjo0qMrUncf1taWCytmhSu0kPDOVsniy8BMlJdzTlgL5QJ+G55NJAoGBAOfc
trZ9b9gI0bBG2Jx9khmY54RZReaJF2q21eR75YTB9myh9AWZ0a+7KukJoay7hk6b
2n3tKx05RV1xbXYM7QKQ2f6Xbvcc8gZbW6viWkrst3ic57stZ2F7Bdg6Q8gH4Wy8
vExvAutE8A7GMlHOjKfx6NByhj8I5jJoPWA84wWZAoGBAOn+AdokRqXsa17Q4btg
Q0MtdS6hX9EnW56JgQ45S0Hk0zb5MpIuljoo95WR/PV9usiBBcog+OYJ7z14xB64
96t5aM3glc90NyRl7CPNdva3vV05kckjezTeINayit848GFFgKqqCniXx1wfq+0v
BVNHRNoVtLsbqMRJgRkzCpVJAoGBAJDjCkYFInPUJvxJeShpC3f1ZY79nkGOH1Tv
Bb/ucCFCd3OwzGUHltGCWzEedKoU0Lukhqc0IkHzvNXEgItJTn3Q+HgwNwYyT0cL
pcBGBPhW7dtv6Rq9J6Hxl1hkKGECE6q4Uc5NfHx6KqyAy4b1VE3KTBqdxifzrq2H
F/tgcNjZAoGBAMoF+HmoroSp0obSTn/CHK15wF7aZBB6clA9d0Ezz63PAd2yLMe3
dMfTpRHVKcMiDrCeYVj/XNjwhA+GXexq4h1WgGBBHuiRwiFP67p5p4Jlad7t6qP9
pnh+oFpRclAmJEJwkj45u5J8oUFeQ7AztILU3qWFMpaYoYLYSdAbkdQR
-----END RSA PRIVATE KEY-----

6c7ad397bbb445cabaf7e928672d7140.png2ecaa4462043441d94f11c798f74bae3.png1477bac10a8148528fe8196705eef85f.png

目录
相关文章
|
24天前
|
运维 监控 jenkins
运维自动化实战:利用Jenkins构建高效CI/CD流程
【10月更文挑战第18天】运维自动化实战:利用Jenkins构建高效CI/CD流程
|
1月前
|
缓存 监控 数据可视化
利用GitLab CI/CD自动化您的软件开发流程
【10月更文挑战第10天】GitLab CI/CD 是 GitLab 内置的持续集成和持续部署工具,通过编写 .gitlab-ci.yml 文件,可以自动化构建、测试和部署应用程序的过程。本文介绍 GitLab CI/CD 的核心优势、实施步骤及在现代开发中的应用,帮助您提高开发效率和软件质量。
|
24天前
|
运维 监控 jenkins
运维自动化实践:利用Jenkins实现高效CI/CD流程
【10月更文挑战第18天】运维自动化实践:利用Jenkins实现高效CI/CD流程
|
1月前
|
JavaScript 测试技术 持续交付
使用 GitLab CI/CD 管道自动化部署 Web 应用
【10月更文挑战第2天】使用 GitLab CI/CD 管道自动化部署 Web 应用
40 0
|
1月前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(一)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(一)
136 0
|
15天前
|
jenkins Devops Java
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第27天】在快速发展的软件开发领域,DevOps实践日益重要。Jenkins作为一款流行的开源自动化服务器,在持续集成(CI)和持续部署(CD)中扮演关键角色。本文通过案例分析,探讨Jenkins在Java项目中的应用,展示其自动化构建、测试和部署的能力,提高开发效率和软件质量。
39 2
|
3月前
|
jenkins 持续交付 开发者
自动化部署:使用Jenkins和Docker实现持续集成与交付
【8月更文挑战第31天】本文旨在为读者揭示如何通过Jenkins和Docker实现自动化部署,从而加速软件开发流程。我们将从基础概念讲起,逐步深入到实际操作,确保即使是初学者也能跟上步伐。文章将提供详细的步骤说明和代码示例,帮助读者理解并应用这些工具来优化他们的工作流程。
|
3天前
|
运维 jenkins Java
Jenkins在持续集成与持续部署中的价值
Jenkins在持续集成与持续部署中的价值
|
16天前
|
jenkins Devops 测试技术
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第26天】随着DevOps理念的普及,Jenkins作为一款开源自动化服务器,在持续集成(CI)与持续部署(CD)中发挥重要作用。本文通过某中型互联网企业的实际案例,展示了Jenkins如何通过自动化构建、持续集成和持续部署,显著提升开发效率、代码质量和软件交付速度,帮助企业解决传统手工操作带来的低效和错误问题。
44 4
|
1月前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
67 0