栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

git+gitlab+jenkins+nginx自动发布

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

git+gitlab+jenkins+nginx自动发布

自动发布系统布置
  • 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 上传一个网站的代码试试

1.配置说明 1.1 服务器主机说明
主机名称 ip作用
kaifa 192.168.80.40开发人员
gitlab 192.168.80.8gitla服务器
jenkins 192.168.80.9jenkins服务器
nginx 192.168.80.11nginx 服务器

虚拟机的ip可以根据的自己的实际情况进行改变即可,注意gitlab的安装需要4G的原型内存,要不然会卡住的
至于gitlab与jenkins的安装前边的章节有

1.2 服务的端口
jenkins8080
gitlab80
nginx80
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

成功,同步过来

成功页面

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/388577.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号