0.环境介绍

效果是我去gitlab上修改了代码,再手动点击Jenkins的构建项目,他会自动上传网页到我的web服务器上(这里的web服务器模拟的预生产环境)

主机

ip地址

部署的服务

gitlab

192.168.6.7

gitlab

Jenkins

192.168.6.6

Jenkins,httpd

web

192.168.6.5

httpd

test

192.168.6.4

用于拉取推送git项目


1.部署gitlab

git拉取gitlab上的代码 gitlab拉取最新代码_jenkins

我这里部署完了Jenkins之后创建了一个仓库,并写了一个index的html文件,我的仓库名字为git

git拉取gitlab上的代码 gitlab拉取最新代码_运维_02


2.部署Jenkins


部署httpd,只用进行安装,开启即可,后面做成的效果就是,test上拉取gitlab修改完推送,Jenkins构建完项目会自动执行想要的执行的脚本(也就是自动部署的脚本)

yum -y install httpd
systemctl start httpd

访问服务器ip(不要加8080就是访问的httpd页面)

git拉取gitlab上的代码 gitlab拉取最新代码_jenkins_03

这样就行


4.部署web

只需要安装开启一下httpd就行,不要修改默认页面,网页一会由jenkins自己去自动部署

yum -y install httpd
systemctl start httpd

git拉取gitlab上的代码 gitlab拉取最新代码_linux_04


5.部署test

test用于拉取git内容,推送一下就行,这里创建了一个test模拟的我们员工上传了代码,Jenkins他构建完会自动上传gitlab中的文件给web

这里只需test可以去把公钥放入gitlab,可以不用密码拉取推送即可

我这里不做过多的演示

👇实现的效果

[root@localhost ~]# git clone git@172.20.10.4:root/git.git
正克隆到 'git'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 0 (delta 0), pack-reused 0
接收对象中: 100% (6/6), done.
[root@localhost ~]# ls
anaconda-ks.cfg  fiseym.sh  git  jenkins-2.450-1.1.noarch.rpm
[root@localhost ~]# cd git/
[root@localhost git]# ls
index.html  README.md
[root@localhost git]# cat index.html
1123
[root@localhost git]# echo 111111111111 > index.html
[root@localhost git]# cat index.html
111111111111
[root@localhost git]# git add .
[root@localhost git]# git commit -m '123321'
[main c346f0f] 123321
 1 file changed, 1 insertion(+), 1 deletion(-)
[root@localhost git]# git push
warning: push.default 未设置,它的默认值将会在 Git 2.0 由 'matching'
修改为 'simple'。若要不再显示本信息并在其默认值改变后维持当前使用习惯,
进行如下设置:

  git config --global push.default matching

若要不再显示本信息并从现在开始采用新的使用习惯,设置:

  git config --global push.default simple

参见 'git help config' 并查找 'push.default' 以获取更多信息。
('simple' 模式由 Git 1.7.11 版本引入。如果您有时要使用老版本的 Git,
为保持兼容,请用 'current' 代替 'simple' 模式)

Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 273 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@172.20.10.4:root/git.git
   0ad50d0..c346f0f  main -> main
[root@localhost git]#

git拉取gitlab上的代码 gitlab拉取最新代码_运维_05


6.部署Jenkin发布代码(主要步骤)

效果是当我的gitlab内容做出了修改,我点击构建Jenkins的项目,他会在末尾执行一个脚本,脚本的内容写的就是,把拉取下来的代码发送到web上(也就是我们改了之后,Jenkins会自动发布文件到web服务器里)我这里修改的文件就是index.html


现在我去构建执行以下Jenkins的项目

git拉取gitlab上的代码 gitlab拉取最新代码_git_06

构建的结果就是拉取gtilab的内容下来

可以在里面看到,他把拉取下来的内容放到了/var/lib/jenkins/workspace/git

现在我去Linux服务器里看一下(注意:以下操作是在Jenkins服务器上,不要搞混了)

git拉取gitlab上的代码 gitlab拉取最新代码_git_07

没问题

现在我去编写一个脚本

vim scp.sh

# 写入

#!/bin/bash
scp /var/lib/jenkins/workspace/git/* root@192.168.6.6:/var/www/html
scp /var/lib/jenkins/workspace/git/* root@192.168.6.5:/var/www/html

在执行前先去做个免密连接,需要把我们的ssh公钥发送给要传文件的目标放,要不等会要需要一直输入密码,我们在这里可以去输入密码,但是等会Jenkins是要搭配这个脚本的,Jenkins如果还要输入密码的话,那就不是自动化了

ssh-copy-id root@192.168.6.6
ssh-copy-id root@192.168.6.5

可能你好奇自己为什么还要给自己传一个,虽然自己给自己传文件,但是还是需要输入密码的

visudo

#在末尾添加内容

jenkins ALL=(ALL) NOPASSWD: /usr/bin/ssh

现在再去执行一下刚刚写的脚本

chmod +x scp.sh
./scp.sh

git拉取gitlab上的代码 gitlab拉取最新代码_linux_08

可以看到传输成功了、

现在我要去把这个脚本和Jenkins项目放到一起,这样的效果就是,后期构建项目的时候,先拉取下来,让后就会执行这个脚本,脚本就是传到别的服务器上进行测试

回到Jenkins的web页面

git拉取gitlab上的代码 gitlab拉取最新代码_运维_09

git拉取gitlab上的代码 gitlab拉取最新代码_git_10

点击配置

git拉取gitlab上的代码 gitlab拉取最新代码_git拉取gitlab上的代码_11

git拉取gitlab上的代码 gitlab拉取最新代码_运维_12

 sudo ssh root@192.168.6.6 ./scp.sh

输入完点击保存(不要把我上面这段抄进去,你要根据你的ip地址,脚本名称去修改一下)

 

git拉取gitlab上的代码 gitlab拉取最新代码_linux_13

会到这里就好了


7.测试

现在我的Jenkins上搭建web页面和web服务器上的web页面都是这样的,因为刚刚测试脚本的时候同步了一下

git拉取gitlab上的代码 gitlab拉取最新代码_运维_14

现在我到test服务器上去修改一下项目 

git拉取gitlab上的代码 gitlab拉取最新代码_git拉取gitlab上的代码_15

再回到Jenkins服务器上点击一下构建项目

 

git拉取gitlab上的代码 gitlab拉取最新代码_运维_16

现在我只点击了一下构建,没做别的,直接去查看两个web页面

git拉取gitlab上的代码 gitlab拉取最新代码_jenkins_17

自动推送成功