自动发布系统布置
1.配置说明
1.1 服务器主机说明
主机名称 ip | 作用 |
---|---|
kaifa 192.168.80.40 | 开发人员 |
gitlab 192.168.80.8 | gitla服务器 |
jenkins 192.168.80.9 | jenkins服务器 |
nginx 192.168.80.11 | nginx 服务器 |
虚拟机的ip可以根据的自己的实际情况进行改变即可,注意gitlab的安装需要4G的原型内存,要不然会卡住的
至于gitlab与jenkins的安装前边的章节有
1.2 服务的端口
jenkins | 8080 |
---|---|
gitlab | 80 |
nginx | 80 |
1.3 关于软件的安装
最好去软件官网查看,官网的步骤很详细,软件的安装可以看我的git专栏里边
如那件分享:
百度网盘:
链接:https://pan.baidu.com/s/1QRfSIOgpmAUP6QWekIa52g
提取码:t3d1
2. 具体的步骤
2.1gitlab上创建项目
192.168.80.8
2.2 开发者的服务器配置公钥到gitlab
开发者:192.168.80.41
ssh秘钥的生成
ssh-keygen -t rsa
三次回车
cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCiQXwstMqAhwo1UOiqiTnVI0lRP5CNkg8rEaRL5WnzKNjO0EBt8UpYmRE24gzFJYB+kvSXEmyBz4Q8+Ge3a35tC5IOpKbQVFZpEgdv9gcH8JPMjh1yE6sFY5EI3M8a9s6qSY1s2aoiZIkdIeXwrHm8wbemEmRU/iAU1dDsNwoA2zdghNWCFkQgTlk32I8KFi3soac34TpYT9U/uh3vcSu62WeWw+o0AcXB1QUMpbdnKPKHntpe9HnFH1pf57PwjeolnZzA867KvS2VHpYmQolLOdfEBouKcubIpY8IvmokXaN9fCgqQN3qOELSYZQBKD83p8nbLF7AKjeoW8BdbAV root@yw7
在gitlab的web页面操作
2.3 开发者本地克隆项目
在kafa的服务器下边
cd /opt
git clone git@192.168.80.8:root/new_project.git
ll
cd new_project
ll
2.4 jenkins安装对应的插件
2.4.1 jenkins安装gitlab与gitlab hook插件
2.4.2jenkins图形确认安装git plugin和publish over ssh插件
2.5 配置jenkins通过publish over ssh免密连接nginx
只有插件安装完成之后才会有publish over ssh这个选项
2.6 添加jenkins服务器的公钥到gitlab
jenkins服务器上的操作
公钥的生成
ssh-keygen -t rsa 三次回车
[root@web03 build_web]# cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCqp88fRAlDuOVPvPKTWE4wlAqx8VFe/Dnj6DN86z3/hVd6ChyAAV9WTpDx015nwpd/a56AnZTpWY3JBUWt2QjgN7K0ub0iA72K8e5WN0MWD5c/iiiLMigBzInqkvcy1b3ncpvDjB8BldF1M3UEDzHO1ZR2m21vHvAydbcadSj/zmoLgZVqSzqoQl4cVGLo35aDUZfmQ0w6aLdqv3//xPxIDNBc5sERdRUU3mxwuY6eUIwoLd0iOBUst8B2MzcpyERCg3YmT5W1ObOn1H0Iv8VPzcvq+aDWKwzcJqYwwDuNn/65SsP1EqfqqMbnz5IdZ8M5Y/3B8wXO+HreKAhXAvXL root@web03
gitlab的web页面的操作
复制gitlab的ssh地址git clone试一试
在jenkins的服务器上试一试
cd /opt
git clone git@192.168.80.8:root/new_project.git
ll
2.7 jenkins上配置全局凭据
秘钥的查看
cat ~/.ssh/id_rsa
[root@web03 opt]# cat ~/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAqqfPH0QJQ7jlT7zyk1hOMJQKsfFRXvw54+gzfOs9/4VXegoc
gAFfVk6Q8dNeZ8KXf2uegJ2U6VmNyQVFrdkI4DeytLm9IgO9ivHuVjdDFg+XP4oo
izIoAcyJ6pL3MtW953Kbw4wfAZXRdTN1BA8xztWUdpttbx7wMnW3GnUo/85qC4GV
aks6qEJeHFRi6N+Wg1GX5kNMOmi3ar9//8T8SAzQXObBEXUVFN5scLmOnlCMKC3d
IjgVLLfAdjM3KchEQoN2Jk+VtTmzp9R9CL/FT83L6vmg1isM3CamMMA7jZ/+uUrD
9RKn6qjG58+SHWfDOWP9wfMFzvh63igIVwL1ywIDAQABAoIBAQCWouOgDJVE8xtv
BDD3QPZbyQGbypByEKAk/Z0dQiUKvK/XqL85enymGVm2LEZjvo+tyNgzXWXJiOQv
sfismSxNhry27FD3imewExe3gLY17fMrAhABtnc8B0kiBzIu7B7iAvddZ/0ikBVA
p/g9ahAkK8EN5Op3MM8DK4dB0nMrQJ6oYjExkeHb0YhoYd0eNUoczahTw1Vc4pvT
XPr+V/ReoCaNF0olOJWyDTYFcbtDSGAsoA8Cxwx7+Ys8YIT2yI55HmbtAycQLx9S
9mwYa+GSX4kdrcSeNCAcJUMwLxeAkG87+hDKCKaFJCv7XuOBd8RwomIsQpzPRglu
1uKSFgdpAoGBANTwLKpwJhMQkr3rJFiIa8ojT/TWO9PmIOGbm83Ono3MNNlEBmR2
UNKEYHp4g0cNnimE3PZX6KJXntoPsp+dRq4V73EzYF27g61AJNE8zsuka67HJz/f
f8AqSxUWz5yY6WHvRWrYOoARJ/E+UgGeYKmzAxnudEVyhHLdbG6kxzAdAoGBAM0q
qEC6PSRzrhEpdJdCwJN8uSiZWkRhJkijJxWTAwIZz87/krtZiHsAhy9XY2tHBpn3
uBDpQHsiWrHT+O62gkxG+crh8N50SppKMC1yHct9fOOlMkUDba8+zED0+Dh3l590
rorLlJMBTk9tNr8mlQrE5my2J/9LRl0CX4nrjCkHAoGAb8ofSONTudKLl1UpYalN
HXPoeBs4kYhRXt/4rdV5e+vnGuERkhBjYgHJPMKj+Nt3W0i7UEDaitABP23aUt2Y
y7AMYpucTdkxyfTQ32BTGKobNkirnGbThKkvfcTZ/dZxP88D3JHkNHPNSmNzXhIt
oSmvyR9cv1DdpAgG8xdi0ykCgYABtMYba7EQeYnMCL04eMyjLVlY1hWjFe+8kObF
TiirPs20mfl9Z1w0MafuI9rmzHtokl/MfDQWEg4RBoM+cPQacEipgEGBiBQKvm0y
I43N4GhGeFw3qLSjzXDjZWYfChePsue0rca5hjxBetYGtupsYYDNDKK+g8C9C0UC
H5xVxwKBgAzsa7ehyUg2XBMoxF1/r9kNERoNR4AHx8vqTn5JfozSKWpD/bcDQbnC
ehoWKHWfSIcQL7kQE7p/VKQG7D49U444Gndm9YNahfgq1lg/dDGH9n/qwbloecPm
hXYrNMNQritJ7ssx76p3EZCUKL7/zouAGdGnIaQkJ+7AdVCilIQz
-----END RSA PRIVATE KEY-----
复制秘钥的时候需要是完整的从头到尾
2.8 jenkins上创建自动构建任务
2.8.1 项目的创建
2.8.2 项目描述
2.8.3 git的配置
假若这个时候你复制ssh之后会报错,就是你前边的步骤错了,插件没有安装,私钥公钥没有配置好,全局变量也没有配置好
2.8.4 触发器配置:触发条件
就是这个gitlab上的项目内容发生了更改,触发器触发,自动构建
2.8.4.1这两个需要复制保存一下
URL: http://192.168.80.9:8080/project/buildweb
8dfebc7c3db087551550af96f70274ec
2.8.5 构建
触发以后执行什么,shell脚本,把更新的代码同步到nginx的站点目录下
这个脚本只是测试写的,当然实际中会更加的复杂
大致思路就是把jenkins在gitlab上得到更新的代码,同步到nginx的html目录下,也就是nginx的站点目录,根据站点目录不同可以更改脚本,这个就是演示,越简单越好
#!/bin/bash
/usr/bin/rsync -av --delete /var/lib/jenkins/workspace/build_web/ root@192.168.80.11:/usr/share/nginx/html
jenkins的创建一个项目,就会在目录下生成工作目录
/var/lib/jenkins/workspace/build_web
该目录下就是从gitlab上获取的最新的代码,脚本的意义就是把该目录下的文件进行实时同步到nginx的站点目录
2.8.6 保存
2.8.7 关于权限问题的说明
当我们保存之后,构建,脚本会爆出权限阻止的问题
原因:
既然是使用jenkins服务器上的jenkins用户来执行,为什么rsync不传给nginx服务器的jenkins用户,而是传给它的root用户?
因为nginx上没有jenkins用户,就算有jenkins用户,对/usr/share/nginx/html也没有写权限
解决办法:
2.8.7.1 方法一
grep jenkins /etc/passwd
usermod -s /bin/bash jenkins
su - jenkins
ssh-copy-id -i root@192.168.80.11
[root@jenkins-server ~]# grep jenkins /etc/passwd
jenkins:x:988:982:Jenkins Automation Server:/var/lib/jenkins:/bin/false
[root@jenkins-server ~]# usermod -s /bin/bash jenkins
[root@jenkins-server ~]# grep jenkins /etc/passwd
jenkins:x:988:982:Jenkins Automation Server:/var/lib/jenkins:/bin/bash
su - jenkins
-bash-4.2$ ssh-keygen -t rsa -C "jenkins user" -N ""
-bash-4.2$ ssh-copy-id -i root@192.168.80.11
2.8.7.2 方式二
1.修改jenkins的管理用户为root
vim /etc/sysconfig/jenkins
JENKINS_USER="root"
2.修改目录权限
cd /var/lib
chown -R root.root jenkins/
3.重启jenkins生效
systemctl restart jenkins
2.9 jenkins全局安全配置
2.10 配置gitlab允许本地网络使用webhook
2.11 为gitlab自动构建项目添加webhook
2.8.4.1步骤查看
添加成功
3. 代码自动发布测试
3.1 简单的测试,都是在kafa的服务器上操作
开发者的“192.168.80.41”
cd /opt/new_project
echo 'hello i am kafa!!' index.html
git add .
git commit -m "add index.html"
git push origin main
浏览器访问nginx的服务器
192.168.80.11
更改信息再次测试
echo 'gen gai ce shi ' > index.html
git add .
git commit -m "gengai"
git push origin main
访问:
192.168.80.11
3.2 上传一个网站的代码试试
先将原有的文件清理干净
cd /new_project
git rm -f index.html
清除不了直接
rm -rf ./*
上传准备好的文件
ll
push到gitlab
git add --all
git commit -m "add html"
git push origin main
查看jenkins的服务器上的工作目录是否有文件
cd /var/lib/jenkins/workspace/build_web
ll
再看看nginx的站点目录下有没有,这也是一个排错的思路
cd /usr/share/nginx/html
ll
成功,同步过来
成功页面