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
Linux:Gitlab:16.9.2 (rpm包) 部署及基础操作(1)_non-fatal posttrans scriptlet failure in rpm packa-CSDN博客https://blog.csdn.net/w14768855/article/details/136821311?spm=1001.2014.3001.5501Linux:Gitlab:16.9.2 创建用户及项目仓库基础操作(2)-CSDN博客
https://blog.csdn.net/w14768855/article/details/136852844?spm=1001.2014.3001.5501我这里部署完了Jenkins之后创建了一个仓库,并写了一个index的html文件,我的仓库名字为git
2.部署Jenkins
Linux:rpm部署Jenkins(1)-CSDN博客https://blog.csdn.net/w14768855/article/details/136920259?spm=1001.2014.3001.5501Linux:Jenkins执行项目拉取gitlab代码(2)-CSDN博客
https://blog.csdn.net/w14768855/article/details/136966355?spm=1001.2014.3001.5501我这里的Jenkins做到了项目库可以拉取代码,我本章内容会跟据上面两篇文章继续写
部署httpd,只用进行安装,开启即可,后面做成的效果就是,test上拉取gitlab修改完推送,Jenkins构建完项目会自动执行想要的执行的脚本(也就是自动部署的脚本)
yum -y install httpd
systemctl start httpd
访问服务器ip(不要加8080就是访问的httpd页面)
这样就行
4.部署web
只需要安装开启一下httpd就行,不要修改默认页面,网页一会由jenkins自己去自动部署
yum -y install httpd
systemctl start httpd
5.部署test
test用于拉取git内容,推送一下就行,这里创建了一个test模拟的我们员工上传了代码,Jenkins他构建完会自动上传gitlab中的文件给web
这里只需test可以去把公钥放入gitlab,可以不用密码拉取推送即可
Linux:git的基础操作-CSDN博客https://blog.csdn.net/w14768855/article/details/136787643?spm=1001.2014.3001.5501如果不会放公钥可以去看一下github怎么放,gitlab和github基本都一样,在设置或者用户设置里都可以,我这里不做过多的演示
👇实现的效果
[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]#
6.部署Jenkin发布代码(主要步骤)
效果是当我的gitlab内容做出了修改,我点击构建Jenkins的项目,他会在末尾执行一个脚本,脚本的内容写的就是,把拉取下来的代码发送到web上(也就是我们改了之后,Jenkins会自动发布文件到web服务器里)我这里修改的文件就是index.html
Linux:Jenkins执行项目拉取gitlab代码(2)-CSDN博客https://blog.csdn.net/w14768855/article/details/136966355?spm=1001.2014.3001.5501 这里是基于这个文章做的,上面这个文章效果出了,本章就能继续往下做
现在我去构建执行以下Jenkins的项目
构建的结果就是拉取gtilab的内容下来
可以在里面看到,他把拉取下来的内容放到了/var/lib/jenkins/workspace/git
现在我去Linux服务器里看一下(注意:以下操作是在Jenkins服务器上,不要搞混了)
没问题
现在我去编写一个脚本
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
可以看到传输成功了、
现在我要去把这个脚本和Jenkins项目放到一起,这样的效果就是,后期构建项目的时候,先拉取下来,让后就会执行这个脚本,脚本就是传到别的服务器上进行测试
回到Jenkins的web页面
点击配置
sudo ssh root@192.168.6.6 ./scp.sh
输入完点击保存(不要把我上面这段抄进去,你要根据你的ip地址,脚本名称去修改一下)
会到这里就好了
7.测试
现在我的Jenkins上搭建web页面和web服务器上的web页面都是这样的,因为刚刚测试脚本的时候同步了一下
现在我到test服务器上去修改一下项目
再回到Jenkins服务器上点击一下构建项目
现在我只点击了一下构建,没做别的,直接去查看两个web页面
自动推送成功