- 1.配置说明
- 1.1 服务器主机说明
- 1.2 服务的端口
- 1.3 关于软件的安装
- 2. 具体的步骤
- 2.1gitlab上创建项目
- 2.2 开发者的服务器配置公钥到gitlab
- 2.3 开发者本地克隆项目
- 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
- 2.6 添加jenkins服务器的公钥到gitlab
- 2.7 jenkins上配置全局凭据
- 2.8 jenkins上创建自动构建任务
- 2.8.1 项目的创建
- 2.8.2 项目描述
- 2.8.3 git的配置
- 2.8.4 触发器配置:触发条件
- 2.8.4.1这两个需要复制保存一下
- 2.8.5 构建
- 2.8.6 保存
- 2.8.7 关于权限问题的说明
- 2.8.7.1 方法一
- 2.8.7.2 方式二
- 2.9 jenkins全局安全配置
- 2.10 配置gitlab允许本地网络使用webhook
- 2.11 为gitlab自动构建项目添加webhook
- 3. 代码自动发布测试
- 3.1 简单的测试,都是在kafa的服务器上操作
- 3.2 上传一个网站的代码试试
| 主机名称 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的安装前边的章节有
| jenkins | 8080 |
|---|---|
| gitlab | 80 |
| nginx | 80 |
最好去软件官网查看,官网的步骤很详细,软件的安装可以看我的git专栏里边
如那件分享:
百度网盘:
链接:https://pan.baidu.com/s/1QRfSIOgpmAUP6QWekIa52g
提取码:t3d1
192.168.80.8
开发者: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页面操作
在kafa的服务器下边
cd /opt git clone git@192.168.80.8:root/new_project.git ll cd new_project ll2.4 jenkins安装对应的插件 2.4.1 jenkins安装gitlab与gitlab hook插件
只有插件安装完成之后才会有publish over ssh这个选项
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 ll2.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 项目的创建
假若这个时候你复制ssh之后会报错,就是你前边的步骤错了,插件没有安装,私钥公钥没有配置好,全局变量也没有配置好
就是这个gitlab上的项目内容发生了更改,触发器触发,自动构建
URL: http://192.168.80.9:8080/project/buildweb 8dfebc7c3db087551550af96f70274ec2.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.112.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 jenkins2.9 jenkins全局安全配置 2.10 配置gitlab允许本地网络使用webhook
2.8.4.1步骤查看
添加成功
开发者的“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.113.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
成功,同步过来
成功页面



