CI/CD之Jenkins+Gitlab(三)

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

-使用Jenkins创建新项目

3a49f6e14f494adbae396c8ec12e999c.png27cb3f6308ae494fba1920707396c714.png

f724d6beb15d4922a57d7cd42efd3ff9.png

9d282e8280934110ad19e39ebcc00251.png

2d889f05534d47e994e5d9c50b4a432d.png


点击保存


af5f9e6e134d4cf3bb500aa9998a245a.png

f685c8452aaa40889f7f321b12c7aac8.png

cfc5b03b487848dd8566fea664b678eb.png

7cd7901c4b8b46c9a8c2a91a689715f8.png


创建新项目完成


-将代码发布到web服务器


可以通过执行命令或脚本的方式进行代码发布,使用 root 用户在各个 web 服务器上发布代码。也可以建立一些普通用户如果www或apache 来发布。如果使用普通用户发布代码,要保持所有服务器上的用户id一致,这样没有权限的问题。这里直接使用 root 用户来发布。

******(1)为apache主机安装httpd
[root@Centos7 ~]# hostnamectl set-hostname apache
[root@Centos7 ~]# su
[root@apache ~]# systemctl stop firewalld
[root@apache ~]# setenforce 0
setenforce: SELinux is disabled
[root@apache ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
mount: /dev/sr0 已经挂载或 /mnt 忙
       /dev/sr0 已经挂载到 /mnt 上
[root@apache ~]# yum -y install httpd
。。。。。。
完毕!
[root@apache ~]# systemctl start httpd

先测试一下,成功访问

595117dc4de64c66a7ae65bd286e167d.png

******(2)配置免密认证,所有需要jenkins自动发布代码的服务器都需要进行免密认证
[root@jenkins ~]# ssh-copy-id 192.168.100.204   #发送公钥
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be ins talled: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.100.204 (192.168.100.204)' 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
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.100.204's password:    #输入204密码
Number of key(s) added: 1
Now try logging into the machine, with:   "ssh '192.168.100.204'"
and check to make sure that only the key(s) you wanted were added.
[root@jenkins ~]# ssh 192.168.100.204  #登录204
Last login: Thu Jul  1 00:38:03 2021
[root@apache ~]# exit    #成功免密
登出
******(3)创建自动上传文件的脚本
[root@jenkins ~]# vim aaa.sh
#!/bin/bash
scp /var/lib/jenkins/workspace/aaa/* root@192.168.100.204:/var/www/html    #这里需要看一下自己的仓库名称是什么
#保存退出
[root@jenkins ~]# chmod +x aaa.sh  #添加可执行权限
[root@jenkins aaa]# pwd
/var/lib/jenkins/workspace/aaa
[root@jenkins aaa]# ll
总用量 4
-rw-r--r-- 1 root root 16 6月  30 16:32 1.html
[root@jenkins aaa]# cat 1.html 
aaaaaaaaaaaaaaaa

(4)把脚本添加到jenkins

777511f27a6243e68386e98b8fcc6216.png

705878df53704b62b21af33196125da8.png

79bf47992ce647b299c142243b750fa1.png

120fc3481201481c82db66ebae8ac12c.png


5fa1f70b82c74273ac1c236cdd1f2c4b.png

26c6732c15ab486daae9195cc9da8ae0.png

275bb906eef24ab6bb8f2d4662d23e4f.pngcc95bc57d8ee455a9b0ce4e326310bfd.png

访问204的httpd测试结果

******先到204上,发现脚本的操作成功执行
[root@apache ~]# ll /var/www/html/
总用量 4
-rw-r--r-- 1 root root 16 7月   1 00:53 1.html
[root@apache ~]# cd /var/www/html/   
[root@apache html]# mv 1.html index.html   #这里修改了一下网页名称,不然访问不到,可以在gitlab上修改一下名称

dc147bdf0df5418aa2813296203b5e85.png

成功访问!!!


可以在gitlab去修改文件名称和内容,再次进行测试

60028ee81ffb4ba9a3cff12d198c2d79.png

0915599232be451fbfa996dd29693c0b.png

8afdd904ff3049e89fbdbe2bb7705d59.png

6c4e3342b22b494d97b1e706321e1570.png


发现web页面变成了修改的内容!!


三、实战项目


(1)更新gitlab代码触发jenkins自动部署


实际场景: 在公司的测试环境当中,当开发人员向 gitlab 仓库提交代码后,gitlab 自动通知 jenkins进行构建项目、代码质量测试然后部署至测试环境,这里先暂时部署到测试环境。对于生产环境,后期使用手动部署代码。


需要安装的插件: (有的默认已经安装,可以在已安装的搜索栏搜索一下)


Gitlab Hook Plugin(之前已经安装过)


Build Authorization

Token Root 和 Build Token Trigger


-配置身份验证令牌

******在jenkins服务器上生成随机码
[root@jenkins ~]#  openssl rand -hex 12   
9525c873b906b013078337c1
#-hex 输出的结果为16进制数据,12表示指定生成的为随机的12个字符

-在jenkins上配置触发器

e120ae19b9544bbc9fb8b44ad74a961a.png

6e2e773087e44d099428495e3abc80ef.png

a16747b0be7e4955ae5e1a1972525faf.png


-在git项目的配置界面设置链接和token


登录创建项目的用户,因为我上面创建项目的用户是root,所以我直接登录root

ac6205bca8ef4a23a511c8af55db258e.png

17c7bbf2e8ec49e5a5b62424217b2f06.png

如果不允许钩子和服务访问本地网络的话,在添加web钩子的时候会报错,下面添加web钩子

8c7c87b4013540de9f49be48bc915f35.png

42c4fda7d884402abdece7ec8bebba4c.png

5fd943ed78e34654a58aed097b629e7e.png


URL:http://192.168.100.203:8080/buildByToken/build?job=aaa&token=9525c873b906b013078337c1,这个URL后面的job需要和自己的项目名称相同,可以先到jenkins点击到项目中后查看当前的URL即可

04def38b6306498aa1db9f86a9fc1c6b.png

b8635478069e49028623f5d2a06b2ea3.png

9a0277c4731b419592445d4bcd325a9b.png


-对web钩子进行测试

a1dcb02821b44fe496dcef92b0008d7c.png

88e2130622374daf97f3535f8aaf9f3a.png


-更新gitlab中的项目代码

******在jenkins上操作
[root@jenkins ~]# ll
总用量 477292
-rwxr-xr-x  1 root root        84 6月  30 16:53 aaa.sh
-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
-rw-r--r--  1 root root 241319636 6月  30 23:49 plugins.tar.gz
drwxr-xr-x  3 root root        32 6月  30 18:57 test
[root@jenkins ~]# rm -rf test/  #删除原来的仓库
[root@jenkins ~]# ll
总用量 477292
-rwxr-xr-x  1 root root        84 6月  30 16:53 aaa.sh
-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
-rw-r--r--  1 root root 241319636 6月  30 23:49 plugins.tar.gz
[root@jenkins ~]# git clone git@192.168.100.202:root/test.git  #重新克隆一下
正克隆到 'test'...
remote: Enumerating objects: 8, done.
remote: Counting objects: 100% (8/8), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 8 (delta 0), reused 0 (delta 0)
接收对象中: 100% (8/8), done.
[root@jenkins ~]# ls
aaa.sh  anaconda-ks.cfg  jdk-8u91-linux-x64.tar.gz  jenkins-2.222.4-1.1.noarch.rpm  plugins.tar.gz  test
[root@jenkins ~]# cd test/
[root@jenkins test]# ll
总用量 4
-rw-r--r-- 1 root root 14 7月   1 16:22 index.html
[root@jenkins test]# cat index.html 
bbbbbbbbbbbbbb
[root@jenkins test]# echo "aaaaaaaaaaaaaaaaaa" > index.html   #修改一下网页文件
[root@jenkins test]# cat index.html 
aaaaaaaaaaaaaaaaaa
[root@jenkins test]# git add .   #添加到暂存区
[root@jenkins test]# git commit -m "add index"  #添加到本地仓库
*** Please tell me who you are.
Run
  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
fatal: unable to auto-detect email address (got 'root@jenkins.(none)')
[root@jenkins test]# git config --global user.name "root"   #指定用户名
[root@jenkins test]# git config --global user.email "1248873545@qq.com"   #指定邮箱
[root@jenkins test]# git commit -m "add index"   #添加到本地仓库
[master 6974052] add index
 1 file changed, 1 insertion(+), 1 deletion(-)
[root@jenkins test]# git push origin master   #推送到远程仓库的master分支
Counting objects: 5, done.
Writing objects: 100% (3/3), 237 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.100.202:root/test.git
   c1d114b..6974052  master -> master

-访问web主机


这里只修改仓库的文件是因为上面的实验已经写过脚本了

45e4fe90c299402f89d3e23ece18f22c.png

成功!!!!


497e203933b840ed8045830dd5232643.png


(2)实现Build Pipeline插件显示流程图


Bulid Pipeline插件作用:这个插件能够以流程图的形式展示各个工作的顺序,依赖关系等

73067ed589ac462096c2f8ec072488fb.png

df066a181f8149d682f6ced504245c8b.png


4b0402abbfbe4f0f939e0ec4e086308c.png


-给aaa项目创建一个视图


2aae8ec912be4f4c8743c71b462321b1.png

b7121d1452be40bfadedc0d8813adb97.png

6fb9513d38f54e32ba6f3f97746b7d16.png

9eefd5d29aed412fb249ed494a1e65de.png

完成!!!


(3)使用分支进行网站回滚

******在jenkins上操作
[root@jenkins ~]# git clone git@192.168.100.202:root/test.git
正克隆到 'test'...
remote: Enumerating objects: 11, done.
remote: Counting objects: 100% (11/11), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 11 (delta 0), reused 0 (delta 0)
接收对象中: 100% (11/11), done.
[root@jenkins ~]# ll
总用量 477292
-rwxr-xr-x  1 root root        84 6月  30 16:53 aaa.sh
-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
-rw-r--r--  1 root root 241319636 6月  30 23:49 plugins.tar.gz
drwxr-xr-x  3 root root        36 7月   1 17:05 test
[root@jenkins ~]# cd test/
[root@jenkins test]# git branch   #查看所有分支
* master 
[root@jenkins test]# git branch bb  #创建分支
[root@jenkins test]# git checkout bb  #切换分支
切换到分支 'bb'
[root@jenkins test]# git branch
* bb
  master
[root@jenkins test]# git merge master 
Already up-to-date.  
[root@jenkins test]# cat index.html 
aaaaaaaaaaaaaaaaaa
[root@jenkins test]# echo "bbbbbbbbb" > index.html   #修改文件内容
[root@jenkins test]# cat index.html 
bbbbbbbbb
[root@jenkins test]# git add .    #推送到暂存区
[root@jenkins test]# git commit -m "add new"  #推送到本地仓库
[bb e4c8495] add new
 1 file changed, 1 insertion(+), 1 deletion(-)
[root@jenkins test]# git push -u origin bb   #推送到远程仓库
Counting objects: 5, done.
Writing objects: 100% (3/3), 235 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: 
remote: To create a merge request for bb, visit:
remote:   http://192.168.100.202/root/test/merge_requests/new?merge_request%5Bsource_branch%5D=bb
remote: 
To git@192.168.100.202:root/test.git
   6974052..e4c8495  bb -> bb
分支 bb 设置为跟踪来自 origin 的远程分支 bb。

这个时候在gtilab的web界面中可以看到增加了新的分支

8c00d27f90644fc79beb086d49e181f2.png

******修改脚本
[root@jenkins ~]# vim aaa.sh 
#!/bin/bash
cd /root
git clone -b bb git@192.168.100.202:root/test.git
scp /root/test/index.html root@192.168.100.204:/var/www/html/index.html
[root@jenkins ~]# chmod  +x aaa.sh 

测试,是否更换页面

053c74b116ed4a039503e9d0afb23c0f.png

(4)使用jenkins发布tomcat项目


此项目需要在Jenkins上安装JDK和Maven


Jenkins本身就是java开发,所以必须安装jdk,因为此项目基于maven架构,所以必须安装maven


Maven:就是将开发写的java代码,打包成war包,然后再将打包的war包部署到tomcat上,供客户端来访问


Project Object Model: 项目对象模型。通过xml格式保存的pom.xml文件。该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。该文件是由开发维护,我们运维人员可以不用去关心。


-安装Maven

#下载Maven:wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
******(1)这里已经下载了,所以直接上传进行安装
[root@jenkins ~]# ll
总用量 485928
-rwxr-xr-x  1 root root       144 7月   1 17:14 aaa.sh
-rw-------. 1 root root      1264 1月  12 18:27 anaconda-ks.cfg
-rw-r--r--  1 root root   8842660 7月   2 09:29 apache-maven-3.5.4-bin.tar.gz
-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
-rw-r--r--  1 root root 241319636 6月  30 23:49 plugins.tar.gz
drwxr-xr-x  3 root root        36 7月   1 17:05 test
[root@jenkins ~]# tar xf apache-maven-3.5.4-bin.tar.gz 
[root@jenkins ~]# mv apache-maven-3.5.4 maven      
[root@jenkins ~]# ln -s maven/bin/mvn /usr/bin/mvn   #优化命令执行路径
[root@jenkins ~]# vim /etc/profile  #在末尾添加
。。。。。。
export MAVEN_HOME=/root/maven
export PATH=$PATH:$MAVEN_HOME/bin
#保存退出
[root@jenkins ~]# source /etc/profile

-创建Maven私服nexus


因为maven要下载jar包,而maven默认回去官网下载,官网下载太慢了,所以可以搭建nexus加快jar包的下载速度


配置仓库的两个选项:1.项目下的pom.xml配置,只会生效当前的项目


2.在maven配置全局,所有项目生效

******(1)上传nexus包进行安装
[root@jenkins ~]# ll
总用量 605956
-rwxr-xr-x  1 root root       144 7月   1 17:14 aaa.sh
-rw-------. 1 root root      1264 1月  12 18:27 anaconda-ks.cfg
-rw-r--r--  1 root root   8842660 7月   2 09:29 apache-maven-3.5.4-bin.tar.gz
-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  6 root root        99 7月   2 09:29 maven
-rw-r--r--  1 root root 122904706 7月   2 09:34 nexus-3.13.0-01-unix.tar.gz
-rw-r--r--  1 root root 241319636 6月  30 23:49 plugins.tar.gz
drwxr-xr-x  3 root root        36 7月   1 17:05 test
[root@jenkins ~]# tar xf nexus-3.13.0-01-unix.tar.gz 
[root@jenkins ~]# mv nexus-3.13.0-01 /usr/local/nexus
[root@jenkins ~]# /usr/local/nexus/bin/nexus start   #开启nexus
WARNING: ************************************************************
WARNING: Detected execution as "root" user.  This is NOT recommended!
WARNING: ************************************************************
Starting nexus
#nexus默认监听的端口是8081,因为是java开发,所有启动比较慢
[root@jenkins ~]# netstat -anptu | grep 8081
tcp        0      0 0.0.0.0:8081            0.0.0.0:*               LISTEN      1460/java  

访问nexus


ec45a020866940abac991fd1c439c338.png

0d1ff32e03c24a759c29f4dcb39a4ebc.png

默认账号:admin,默认密码:admin123

09ba750b2dcc435f8c00d86e71492c41.png

a81d5bbcd3c74e839c5c3345717261f9.png

修改为阿里云的URL:http://maven.aliyun.com/nexus/content/groups/public

5baeb4b424d54f56b829dbfc64c2f09f.png

配置私服

******修改配置文件
[root@jenkins ~]# cd maven/conf/
[root@jenkins conf]# vim settings.xml 
。。。。。。 #在配置文件中间插入
     <mirror>
        <id>nexus-aliyun</id>
           <mirrorOf>*</mirrorOf>
           <name>Nexus aliyun</name>
           <url>http://maven.aliyun.com/nexus/content/groups/public</url>
        <id>nexus</id>
           <mirrorOf>*</mirrorOf>
           <url>http://192.168.100.203:8081/repository/maven-central/</url>
      </mirror>
。。。。。。#这里同样从配置文件中间插入
      <server>
      <id>my-nexus-releases</id>
      <username>admin</username>
      <password>admin123</password>
      </server>
      <server>
      <id>my-nexus-snapshot</id>
      <username>admin</username>
      <password>admin123</password>
      </server>
。。。。。。#这里从197行的profiles开始修改      
197   <profiles>
      <id>nexus</id>
      <repositories>
         <repository>
            <id>central</id>
           <url>http://192.168.100.203:8081/repository/maven-central/</url>
            <releases><enabled>true</enabled></releases>
            <snapshots><enabled>true</enabled></snapshots>
          </repository>
       </repositories>
       <pluginRepositories>
         <pluginRepository>
           <id>central</id>
           <url>http://192.168.100.203:8081/repository/maven-central/</url>
           <releases><enabled>true</enabled></releases>
         <snapshots><enabled>true</enabled></snapshots>
         </pluginRepository>
       </pluginRepositories>
      </profiles>
      <activeProfiles>
      <activeProfile>nexus</activeProfile>
      </activeProfiles>
。。。。。。      
#保存退出

-到jenkins的web界面上安装git和maven的插件

3a9754441da740408127095c32174943.png

1a0c2db39f514693b42ba273b3af03f4.png


如果在可选插件中什么也看不到,可以在管理jenkins的界面点击下载新版本,下载最新的war包,升级jenkins,或者在网页中点击退回之前的版本


1366215bde214741b214cd919523a32e.png

23704c3a57924faf87e176d5e6020450.png

2447f81f24944de8a15c749519e527d7.png

a88785ee927f43e8884d3baf9b12fcc2.png

8782330601fc44d090a0b80d119bc673.png

0fd78c5ec9e24aa4950f718588046e0b.png

安装过程中必须有网,安装不成功可以手动到官网下,或者直接在linux的jenkins的目录中上传插件的目录和插件的jpi文件

目录
相关文章
|
10天前
CI/CD笔记.Gitlab系列:设置GitLab导入源
CI/CD笔记.Gitlab系列:设置GitLab导入源
20 2
|
10天前
|
数据安全/隐私保护
CI/CD笔记.Gitlab系列.新用户管理
CI/CD笔记.Gitlab系列.新用户管理
18 1
|
10天前
|
安全 Shell 数据安全/隐私保护
CI/CD笔记.Gitlab系列:控制台强制修改root用户密码
CI/CD笔记.Gitlab系列:控制台强制修改root用户密码
19 1
|
5天前
|
存储 Ubuntu jenkins
CI/CD 工具比较:Jenkins、GitLab CI、Buildbot、Drone 和 Concourse
CI/CD 工具比较:Jenkins、GitLab CI、Buildbot、Drone 和 Concourse
12 0
|
10天前
|
数据采集 数据处理 持续交付
CI/CD笔记.Gitlab系列.`gitlab-ci.yml`中的头部关键字
CI/CD笔记.Gitlab系列.`gitlab-ci.yml`中的头部关键字
20 0
|
10天前
|
缓存 Kubernetes Shell
CI/CD:安装配置Gitlab Runner
CI/CD:安装配置Gitlab Runner
27 0
|
1月前
|
Java jenkins 持续交付
Jenkins是开源CI/CD工具,用于自动化Java项目构建、测试和部署。通过配置源码管理、构建触发器、执行Maven目标,实现代码提交即触发构建和测试
【7月更文挑战第1天】Jenkins是开源CI/CD工具,用于自动化Java项目构建、测试和部署。通过配置源码管理、构建触发器、执行Maven目标,实现代码提交即触发构建和测试。成功后,Jenkins执行部署任务,发布到服务器或云环境。使用Jenkins能提升效率,保证软件质量,加速上线,并需维护其稳定运行。
83 0
|
3月前
|
Linux 应用服务中间件 网络安全
linux安装Gitlab
linux安装Gitlab
137 0
|
23天前
|
Devops 持续交付 开发工具
入职必会-开发环境搭建54-GitLab下载和安装
GitLab 是一个基于 web 的 Git 仓库管理工具,提供了代码托管、版本控制、协作开发、持续集成等功能,是一个综合的 DevOps 平台。用户可以使用 GitLab 托管他们的代码仓库,并利用其丰富的功能来管理和协作开发项目。 以下是 GitLab 的一些主要特点和功能。
入职必会-开发环境搭建54-GitLab下载和安装
|
4天前
|
Ubuntu 安全 网络安全
在Ubuntu 16.04上安装和配置GitLab的方法
在Ubuntu 16.04上安装和配置GitLab的方法
15 0