本文主要是介绍GitLab、jenkins,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Gitlab服务器:192.168.10.20
jenkins服务器:192.168.10.30
web应用服务器:192.168.10.100
通过容器部署gitlab:
安装容器管理软件podman
![d65cbead2c4541869dfdaebf8dd587cb.png](https://img-blog.csdnimg.cn/direct/d65cbead2c4541869dfdaebf8dd587cb.png)
![c608cb975db747e0962951df925f4151.png](https://img-blog.csdnimg.cn/direct/c608cb975db747e0962951df925f4151.png)
修改主机的22端口,该gitlab软件包中会使用到该端口
![abdf3aacc5f24f4695be45753fc5bb10.png](https://img-blog.csdnimg.cn/direct/abdf3aacc5f24f4695be45753fc5bb10.png)
gitlab容器需要使用/etc/resolv.conf文件
![0a081735ee08440fa6ba790d7139d1c6.png](https://img-blog.csdnimg.cn/direct/0a081735ee08440fa6ba790d7139d1c6.png)
导入镜像
![697a1fd144d84f28bb81fc104f96f39e.png](https://img-blog.csdnimg.cn/direct/697a1fd144d84f28bb81fc104f96f39e.png)
将容器中的目录和宿主机的目录映射保存数据
![9027ea3707144516a5aa827af2e3f58d.png](https://img-blog.csdnimg.cn/direct/9027ea3707144516a5aa827af2e3f58d.png)
-d后台运行。-h gitlab设置容器的主机名。--name gitlab是podman ps查看到的容器名;-p指定宿主机和容器关联的端口号,当访问宿主机443/80/22端口时,这样的请求就发给容器的相关端口; --restart always是开机自启;-v是映射路径,将容器中指定的路径,映射到宿主机,以便保存容器产生的数据;最后的gitlab_zh是镜像名。
![88762e2514064c75891bc677980e0877.png](https://img-blog.csdnimg.cn/direct/88762e2514064c75891bc677980e0877.png)
等待一会,访问该IP地址
![3154a633586c4d019740e4c9f46f1605.png](https://img-blog.csdnimg.cn/direct/3154a633586c4d019740e4c9f46f1605.png)
默认以root登录,修改密码为1234.com
![20a787fb51b842429704f8f9a6ea60d1.png](https://img-blog.csdnimg.cn/direct/20a787fb51b842429704f8f9a6ea60d1.png)
![efefa2bdc0d24c18978912b7b4c401b4.png](https://img-blog.csdnimg.cn/direct/efefa2bdc0d24c18978912b7b4c401b4.png)
![91c4c6a8a142479396767ffdb8bf7200.png](https://img-blog.csdnimg.cn/direct/91c4c6a8a142479396767ffdb8bf7200.png)
修改登录页面
![060fae648da84c5393b8b01717c01457.png](https://img-blog.csdnimg.cn/direct/060fae648da84c5393b8b01717c01457.png)
![c9ec7aaaf979496b8c1f93cf24bd82a9.png](https://img-blog.csdnimg.cn/direct/c9ec7aaaf979496b8c1f93cf24bd82a9.png)
重新登录查看页面
![1ef527f58687440ca5607334eeb1adb2.png](https://img-blog.csdnimg.cn/direct/1ef527f58687440ca5607334eeb1adb2.png)
user1为root用户
![048fe3a22c4a4e29aaf0c4920fe45530.png](https://img-blog.csdnimg.cn/direct/048fe3a22c4a4e29aaf0c4920fe45530.png)
![eb6b7902104b437abd672d0bb7ca1316.png](https://img-blog.csdnimg.cn/direct/eb6b7902104b437abd672d0bb7ca1316.png)
创建用户
![ac958499df6d4d3fbff6576f01ed2594.png](https://img-blog.csdnimg.cn/direct/ac958499df6d4d3fbff6576f01ed2594.png)
![286d88d806fd488a8c858a33f769e0ed.png](https://img-blog.csdnimg.cn/direct/286d88d806fd488a8c858a33f769e0ed.png)
给用户设置默认的登录密码
![5ed3988283e34f4ea02ded19f7dfb8bf.png](https://img-blog.csdnimg.cn/direct/5ed3988283e34f4ea02ded19f7dfb8bf.png)
![3a0ea31378bc4d87a6cba38f5fc42bed.png](https://img-blog.csdnimg.cn/direct/3a0ea31378bc4d87a6cba38f5fc42bed.png)
创建组
![696185963f9f4944864505ef1b2ee4bf.png](https://img-blog.csdnimg.cn/direct/696185963f9f4944864505ef1b2ee4bf.png)
![dc83eb0276bc4511a4bf3ccac58679ab.png](https://img-blog.csdnimg.cn/direct/dc83eb0276bc4511a4bf3ccac58679ab.png)
给组添加用户
![b6f1c49d47d34f48bd1ecb4a7cda4d99.png](https://img-blog.csdnimg.cn/direct/b6f1c49d47d34f48bd1ecb4a7cda4d99.png)
![318790cb6cad4316a5a352020c4743ce.png](https://img-blog.csdnimg.cn/direct/318790cb6cad4316a5a352020c4743ce.png)
创建项目
![18c4fb237dc947ea992c716ade484ab9.png](https://img-blog.csdnimg.cn/direct/18c4fb237dc947ea992c716ade484ab9.png)
![0ff08b5c2fba4ebc98f363db215817d7.png](https://img-blog.csdnimg.cn/direct/0ff08b5c2fba4ebc98f363db215817d7.png)
![f502369b27e94bea89a60fb6b5ae403e.png](https://img-blog.csdnimg.cn/direct/f502369b27e94bea89a60fb6b5ae403e.png)
使用jack用户登录,管理项目
![f1ff591d83dc46728301ca1de992c1e2.png](https://img-blog.csdnimg.cn/direct/f1ff591d83dc46728301ca1de992c1e2.png)
第一次登录需要重新设置密码
![74218db9b5d64eef9bcc89dec5b6c49c.png](https://img-blog.csdnimg.cn/direct/74218db9b5d64eef9bcc89dec5b6c49c.png)
重新登录
![c0bd7ca7ef9444a4ac7a9b0856033894.png](https://img-blog.csdnimg.cn/direct/c0bd7ca7ef9444a4ac7a9b0856033894.png)
![1e5b476fed00479cb2788313309e007d.png](https://img-blog.csdnimg.cn/direct/1e5b476fed00479cb2788313309e007d.png)
点击项目
![54a976cebb9f4fe2b23730a42139f504.png](https://img-blog.csdnimg.cn/direct/54a976cebb9f4fe2b23730a42139f504.png)
复制链接
![b16e883d7cfd4477925520b03c32e23b.png](https://img-blog.csdnimg.cn/direct/b16e883d7cfd4477925520b03c32e23b.png)
http://gitlab/devops/myproject.git将链接中的gitlab修改为gitlab服务虚拟主机的IP地址
http://192.168.10.20/devops/myproject.git
在develop主机上克隆该myproject项目,在本地仓库中会有远程分支(origin)来记录远程仓库的地址。
![e7f57ee2820748ed84b09eda04e842a0.png](https://img-blog.csdnimg.cn/direct/e7f57ee2820748ed84b09eda04e842a0.png)
在myproject目录中创建文件并且创建快照
![353c8a8019874a09a780fad31e6b2535.png](https://img-blog.csdnimg.cn/direct/353c8a8019874a09a780fad31e6b2535.png)
添加文件并打快照
![daeb13b02c9a4c79b25780bcd4c36a7f.png](https://img-blog.csdnimg.cn/direct/daeb13b02c9a4c79b25780bcd4c36a7f.png)
git remote -v :查看远程分支
![934b867da9984bc4b521cd2646e27ed1.png](https://img-blog.csdnimg.cn/direct/934b867da9984bc4b521cd2646e27ed1.png)
push:推送本地的代码
![d093d89c521144b9b69b559f8faa270b.png](https://img-blog.csdnimg.cn/direct/d093d89c521144b9b69b559f8faa270b.png)
刷新Gitlab页面
![284eda187a0c416bac3dfbb30c7b022f.png](https://img-blog.csdnimg.cn/direct/284eda187a0c416bac3dfbb30c7b022f.png)
添加hosts文件
![ff154aff92df4157aa29ad7ebdd371fd.png](https://img-blog.csdnimg.cn/direct/ff154aff92df4157aa29ad7ebdd371fd.png)
此时也可以不需要加-u 指定远程仓库分支,也能push成功
![17ce04cf9aa04f2d9a3bd9e6cebf6040.png](https://img-blog.csdnimg.cn/direct/17ce04cf9aa04f2d9a3bd9e6cebf6040.png)
![a230ffdfa4da44e1b946b561b7825fc5.png](https://img-blog.csdnimg.cn/direct/a230ffdfa4da44e1b946b561b7825fc5.png)
将远程仓库的代码pull,拉取下来
先将远程仓库克隆
![98049b11948c4d4f94d18d54ffcb7fb6.png](https://img-blog.csdnimg.cn/direct/98049b11948c4d4f94d18d54ffcb7fb6.png)
在root下面的仓库添加一个新文件,打快照上传到远程仓库
![64c3347b4cd24ca6bb476246f0290709.png](https://img-blog.csdnimg.cn/direct/64c3347b4cd24ca6bb476246f0290709.png)
![5a54756eeafc4166a7e8c5734e43d64e.png](https://img-blog.csdnimg.cn/direct/5a54756eeafc4166a7e8c5734e43d64e.png)
![78af2a461e3142a5af58aca0fb0b6454.png](https://img-blog.csdnimg.cn/direct/78af2a461e3142a5af58aca0fb0b6454.png)
在/var/tmp下将远程仓库中没有的文件,拉取下来
此时没有passwd文件
![8692202dc57543bbaee5ae11beeaa65e.png](https://img-blog.csdnimg.cn/direct/8692202dc57543bbaee5ae11beeaa65e.png)
git pull:拉取文件
![1d8659b1ff784cae916f89babf33f848.png](https://img-blog.csdnimg.cn/direct/1d8659b1ff784cae916f89babf33f848.png)
创建公钥
![577a821d9adf4b30a64e873d1efe389d.png](https://img-blog.csdnimg.cn/direct/577a821d9adf4b30a64e873d1efe389d.png)
查看密钥,复制公钥
![4b41d63a5fb54ac590256ef70113885b.png](https://img-blog.csdnimg.cn/direct/4b41d63a5fb54ac590256ef70113885b.png)
选择设置
![12bec8d23dd24910aa504bbf59e094e7.png](https://img-blog.csdnimg.cn/direct/12bec8d23dd24910aa504bbf59e094e7.png)
选择ssh密钥
![0cb1682784a94c208ff51629ec7f646f.png](https://img-blog.csdnimg.cn/direct/0cb1682784a94c208ff51629ec7f646f.png)
![7f33aa7fd3ea4d388a95cb96f34e4b21.png](https://img-blog.csdnimg.cn/direct/7f33aa7fd3ea4d388a95cb96f34e4b21.png)
将复制的公钥拷贝到密钥框中
![c44de6f2c2794e18b6be5b1ec70c2261.png](https://img-blog.csdnimg.cn/direct/c44de6f2c2794e18b6be5b1ec70c2261.png)
![00a82820d6b848ab9535d7ed75369e87.png](https://img-blog.csdnimg.cn/direct/00a82820d6b848ab9535d7ed75369e87.png)
此时在develop主机中myproject仓库中的记录的远程仓库路径为http协议,而免密的是ssh协议,所以需要把origin分支删除
![ef37da9763784917aba187254769ff1a.png](https://img-blog.csdnimg.cn/direct/ef37da9763784917aba187254769ff1a.png)
创建ssh协议的地址
点击项目
![d910bfb2a9b742abb445cce1274aae03.png](https://img-blog.csdnimg.cn/direct/d910bfb2a9b742abb445cce1274aae03.png)
选择ssh协议的地址
![8035d78edd204ce589c8ab145f9ba3b8.png](https://img-blog.csdnimg.cn/direct/8035d78edd204ce589c8ab145f9ba3b8.png)
git@gitlab:devops/myproject.git将gitlab替换为IP地址
git@192.168.10.20:devops/myproject.git
创建ss地址
![1c48f3f98bc144e988d33d38b0e8a173.png](https://img-blog.csdnimg.cn/direct/1c48f3f98bc144e988d33d38b0e8a173.png)
添加文件并创建快照
![d48bfeeffd044602a438343bf9cfab9e.png](https://img-blog.csdnimg.cn/direct/d48bfeeffd044602a438343bf9cfab9e.png)
![2802d5e723704b8195ee37d082be5222.png](https://img-blog.csdnimg.cn/direct/2802d5e723704b8195ee37d082be5222.png)
![2b7e1360f23e4b0fa09af21403f3f2a7.png](https://img-blog.csdnimg.cn/direct/2b7e1360f23e4b0fa09af21403f3f2a7.png)
练习:
1.在gitlab上新建名为mytest的项目,为devops组创建,可见等级为公开
2.将192.168.10.10 (develop服务器,以自己的ip为准)上的mytest项目关联到gitlab的mytest,以ssh方式关联
2.将192.168.10.10 (develop服务器,以自己的ip为准)上的mytest项目关联到gitlab的mytest,以ssh方式关联
3.在192.168.10.10 (develop服务器,以自己的ip为准)上,把mytest目录中文件上传
以root用户创建项目
![d09feebe0771466c915160162f0ca981.png](https://img-blog.csdnimg.cn/direct/d09feebe0771466c915160162f0ca981.png)
![c3c4056eed204930921734196363e11f.png](https://img-blog.csdnimg.cn/direct/c3c4056eed204930921734196363e11f.png)
![37bb330a76b442b5a3d5e6c4f0cb1588.png](https://img-blog.csdnimg.cn/direct/37bb330a76b442b5a3d5e6c4f0cb1588.png)
git@gitlab:devops/mytest.git修改为git@192.168.10.20:devops/mytest.git
将develop主机的mytest项目添加远程仓库的地址记录
![ab7b147ebfcb4400814cd285a9ea8a55.png](https://img-blog.csdnimg.cn/direct/ab7b147ebfcb4400814cd285a9ea8a55.png)
上传文件到远程仓库
![7a02f98b29e2411cbeb5ca015f3ad2b8.png](https://img-blog.csdnimg.cn/direct/7a02f98b29e2411cbeb5ca015f3ad2b8.png)
![d16cc9c58c7d434897c8178533e30632.png](https://img-blog.csdnimg.cn/direct/d16cc9c58c7d434897c8178533e30632.png)
设置自动开启gitlab服务,给文件添加x权限
![d566f1a8d7434d2b8a537cc0594403bb.png](https://img-blog.csdnimg.cn/direct/d566f1a8d7434d2b8a537cc0594403bb.png)
![173178989c2e4a089a82389a7b6bf2ea.png](https://img-blog.csdnimg.cn/direct/173178989c2e4a089a82389a7b6bf2ea.png)
CI(持续集成)/CD(持续部署)
项目部署的过程:
CI(程序员--->gitlab--->jenkins)CD(--->应用服务器(python编写自动化脚本))
![7d2d2a3adbcd497f9fd37f9d064f3e78.png](https://img-blog.csdnimg.cn/direct/7d2d2a3adbcd497f9fd37f9d064f3e78.png)
安装Jenkins依赖,jenkins是Java程序所以装java,postfix和mailx是邮件程序,jenkins可以通过它们给管理员发邮件
![81b63e7b4c1e41e08620eaaa20b50197.png](https://img-blog.csdnimg.cn/direct/81b63e7b4c1e41e08620eaaa20b50197.png)
安装jenkins软件包
![67d1f381e8ef4a709e133df52fa6e2a4.png](https://img-blog.csdnimg.cn/direct/67d1f381e8ef4a709e133df52fa6e2a4.png)
开启服务
![336b6aca433246dfab78b7e99c209897.png](https://img-blog.csdnimg.cn/direct/336b6aca433246dfab78b7e99c209897.png)
访问jenkins端口号为8080
![986a2f75c1d14f319f3f44673fc07555.png](https://img-blog.csdnimg.cn/direct/986a2f75c1d14f319f3f44673fc07555.png)
在/var/lib/jenkins/secrets/initialAdminPassword文件中查看密码
![90c3c1e76f0643c79303885b2bd14eda.png](https://img-blog.csdnimg.cn/direct/90c3c1e76f0643c79303885b2bd14eda.png)
输入密码
![8c2ee71a8f514e6faa8a59200b56a2ed.png](https://img-blog.csdnimg.cn/direct/8c2ee71a8f514e6faa8a59200b56a2ed.png)
选择跳过插件安装
![976d537c4854445ca165e59eebdd0c8f.png](https://img-blog.csdnimg.cn/direct/976d537c4854445ca165e59eebdd0c8f.png)
选择系统自带的管理员用户
![4cd483d1810840728096994251851118.png](https://img-blog.csdnimg.cn/direct/4cd483d1810840728096994251851118.png)
保存并完成
![9a0f431b8c7446f08c9f88c772cfd024.png](https://img-blog.csdnimg.cn/direct/9a0f431b8c7446f08c9f88c772cfd024.png)
![7b1264a97fdc4092b60779e2c961c720.png](https://img-blog.csdnimg.cn/direct/7b1264a97fdc4092b60779e2c961c720.png)
![c46cc292e7df4042aa92594003d57599.png](https://img-blog.csdnimg.cn/direct/c46cc292e7df4042aa92594003d57599.png)
修改用户密码
![ed92f15785ea44229633ad294e55236b.png](https://img-blog.csdnimg.cn/direct/ed92f15785ea44229633ad294e55236b.png)
![dcaea7da5cae4753876c7827b729f883.png](https://img-blog.csdnimg.cn/direct/dcaea7da5cae4753876c7827b729f883.png)
此时密码为123456
![34709083866f47c58e4e89e1ff9bf4e9.png](https://img-blog.csdnimg.cn/direct/34709083866f47c58e4e89e1ff9bf4e9.png)
![2ef2170451804e9d8c5d84426283b709.png](https://img-blog.csdnimg.cn/direct/2ef2170451804e9d8c5d84426283b709.png)
安装插件
![3f0f81d3287d4f2caa5d7ad4aaff4077.png](https://img-blog.csdnimg.cn/direct/3f0f81d3287d4f2caa5d7ad4aaff4077.png)
将解压的插件复制到/var/lib/jenkins/plugins/目录下面
![3f9ea342a67049eea262ac77ba7fa937.png](https://img-blog.csdnimg.cn/direct/3f9ea342a67049eea262ac77ba7fa937.png)
重启jenkins服务
![53e19d9da95d45a5a88fee69090ced0f.png](https://img-blog.csdnimg.cn/direct/53e19d9da95d45a5a88fee69090ced0f.png)
刷新页面此时语言就有中文显示
![469f79e42c5f4c229b5f1dce34c8070c.png](https://img-blog.csdnimg.cn/direct/469f79e42c5f4c229b5f1dce34c8070c.png)
有些英文没有翻译
![75f44e2c4b284ef4a84f41162fd18b78.png](https://img-blog.csdnimg.cn/direct/75f44e2c4b284ef4a84f41162fd18b78.png)
给当前的myproject项目打一个标记
![9f54e95ed31f4a7d9dfe546485942cab.png](https://img-blog.csdnimg.cn/direct/9f54e95ed31f4a7d9dfe546485942cab.png)
![cb9efa7ffcf140cea15dea03f96990a1.png](https://img-blog.csdnimg.cn/direct/cb9efa7ffcf140cea15dea03f96990a1.png)
添加index.html文件并打快照、打标记
![6e899a1a0ecb4e998961789f12fa3fef.png](https://img-blog.csdnimg.cn/direct/6e899a1a0ecb4e998961789f12fa3fef.png)
将标签传递给远程仓库
![22010d2d58994d4aa321991cd6c55278.png](https://img-blog.csdnimg.cn/direct/22010d2d58994d4aa321991cd6c55278.png)
![9fd49f96071a4f8ab6d01375c78bcea3.png](https://img-blog.csdnimg.cn/direct/9fd49f96071a4f8ab6d01375c78bcea3.png)
![f27052e2b0214ff68a4341bbcb64228f.png](https://img-blog.csdnimg.cn/direct/f27052e2b0214ff68a4341bbcb64228f.png)
使用jenkins将指定版本的代码下载下来
在jenkins创建任务
![0bd02dca229b466aaea67363afab3633.png](https://img-blog.csdnimg.cn/direct/0bd02dca229b466aaea67363afab3633.png)
![259bdc56d9e346bd8d6599df0dc951fa.png](https://img-blog.csdnimg.cn/direct/259bdc56d9e346bd8d6599df0dc951fa.png)
![ae651344e9f247908f2c69e0213d7a3a.png](https://img-blog.csdnimg.cn/direct/ae651344e9f247908f2c69e0213d7a3a.png)
![12d11b974b3c483a9d0ba19988516b76.png](https://img-blog.csdnimg.cn/direct/12d11b974b3c483a9d0ba19988516b76.png)
![bf4f93568a104415ab4d7c0a81b12fe3.png](https://img-blog.csdnimg.cn/direct/bf4f93568a104415ab4d7c0a81b12fe3.png)
将jenkins创建的任务和远程仓库对接,使用myprojecthttp的地址 http:/192.168.10.20/devops/myproject.git
![a3092dacdd154ee9a835b40c80abae8d.png](https://img-blog.csdnimg.cn/direct/a3092dacdd154ee9a835b40c80abae8d.png)
指定分支使用定义的web变量来获取
![f95a4702abe64842b60d1ad750714e3c.png](https://img-blog.csdnimg.cn/direct/f95a4702abe64842b60d1ad750714e3c.png)
通过web变量来构建项目(将指定标签的版本拉取到jenkins)
![d85e05d553af4e51b2a8b314e3fc49b8.png](https://img-blog.csdnimg.cn/direct/d85e05d553af4e51b2a8b314e3fc49b8.png)
![4872dd931f26459db53a4f4d8c8f75ac.png](https://img-blog.csdnimg.cn/direct/4872dd931f26459db53a4f4d8c8f75ac.png)
![666ca791590c48d19df8d90d992788e5.png](https://img-blog.csdnimg.cn/direct/666ca791590c48d19df8d90d992788e5.png)
查看jenkins拉取远程仓库的相关操作
![97d6e0d9ca714c4ea30e7b684fd86bfb.png](https://img-blog.csdnimg.cn/direct/97d6e0d9ca714c4ea30e7b684fd86bfb.png)
![1fd6d6eb06144583bfce52654d9e5bdb.png](https://img-blog.csdnimg.cn/direct/1fd6d6eb06144583bfce52654d9e5bdb.png)
查看拉取下来的文件,拉取的是1.0版本没有index文件
![f21800fd133d46698188d97c1c72afed.png](https://img-blog.csdnimg.cn/direct/f21800fd133d46698188d97c1c72afed.png)
拉取1.1的版本
![a9e8003473e6436d95274a635c768dc2.png](https://img-blog.csdnimg.cn/direct/a9e8003473e6436d95274a635c768dc2.png)
![149b567471f64944a5ab665869e4ce44.png](https://img-blog.csdnimg.cn/direct/149b567471f64944a5ab665869e4ce44.png)
此时覆盖了1.0的版本文件
![2c7c5b2c2aad4ceb8c0a20ba544c53d7.png](https://img-blog.csdnimg.cn/direct/2c7c5b2c2aad4ceb8c0a20ba544c53d7.png)
让不同版本存放在不同的目录,创建项目的子目录存放不同的版本
![bc65111bfe2b466eac2335bd96fd8752.png](https://img-blog.csdnimg.cn/direct/bc65111bfe2b466eac2335bd96fd8752.png)
![e97d61b3ac584a81b086dffb00bead63.png](https://img-blog.csdnimg.cn/direct/e97d61b3ac584a81b086dffb00bead63.png)
![7e583c9222774abd9087461bfbd2e5c3.png](https://img-blog.csdnimg.cn/direct/7e583c9222774abd9087461bfbd2e5c3.png)
将已经构建拉取的myproject项目删除
![37444791a153404d8ae6774c828e8ee3.png](https://img-blog.csdnimg.cn/direct/37444791a153404d8ae6774c828e8ee3.png)
重新构建项目
![79303616d5f6454495d5336bc3f8cb1f.png](https://img-blog.csdnimg.cn/direct/79303616d5f6454495d5336bc3f8cb1f.png)
![38f8b0640cb14747ae9678fcccf85c05.png](https://img-blog.csdnimg.cn/direct/38f8b0640cb14747ae9678fcccf85c05.png)
![b8144ff98b3a4ea5872e2a28b6a65c8c.png](https://img-blog.csdnimg.cn/direct/b8144ff98b3a4ea5872e2a28b6a65c8c.png)
![4d8b958a612d4016b7710def904806bb.png](https://img-blog.csdnimg.cn/direct/4d8b958a612d4016b7710def904806bb.png)
查看项目
![5f901ca2d491493b8ce418c47f20fadc.png](https://img-blog.csdnimg.cn/direct/5f901ca2d491493b8ce418c47f20fadc.png)
给应用服务器使用,将指定版本的目录打包
在jenkins安装http服务。用来响应应用服务器的http服务请求
![570f15c76d7a4e8196be8a8b43b7544d.png](https://img-blog.csdnimg.cn/direct/570f15c76d7a4e8196be8a8b43b7544d.png)
![b8d3e64e12714e7aafce44a0c075cc6a.png](https://img-blog.csdnimg.cn/direct/b8d3e64e12714e7aafce44a0c075cc6a.png)
将版本号打包
![91923628e26f4b67b179f392b9d81937.png](https://img-blog.csdnimg.cn/direct/91923628e26f4b67b179f392b9d81937.png)
![ab13e58d4f9a460d9087fd0bf82a3947.png](https://img-blog.csdnimg.cn/direct/ab13e58d4f9a460d9087fd0bf82a3947.png)
执行的shell命令{
pkg_dir=/var/www/html/deploy/packages
cp -r myproject-$web $pkg_dir
rm -rf $pkg_dir/myproject-$web/.git
cd $pkg_dir
tar zcf myproject-$web.tar.gz myproject-$web
rm -rf myproject-$web
md5sum myproject-$web.tar.gz | awk '{print $1}' > myproject-$web.tar.gz.md5
cd ..
echo -n $web > version.txt
![a14ed8b5049c4fd4a7745d4f565357d1.png](https://img-blog.csdnimg.cn/direct/a14ed8b5049c4fd4a7745d4f565357d1.png)
将jenkins的拉取的项目删除,重新构建项目
![606bb8c595294532a1516eecc467b796.png](https://img-blog.csdnimg.cn/direct/606bb8c595294532a1516eecc467b796.png)
![c5e1dc621ac643b3a995edf3f6a332b2.png](https://img-blog.csdnimg.cn/direct/c5e1dc621ac643b3a995edf3f6a332b2.png)
![50ae2eb9d9de4291baea50102911d612.png](https://img-blog.csdnimg.cn/direct/50ae2eb9d9de4291baea50102911d612.png)
![12570bd1ed38452aaa68e9e8f9ab054e.png](https://img-blog.csdnimg.cn/direct/12570bd1ed38452aaa68e9e8f9ab054e.png)
![50678457c0024e0d831fa142cd692431.png](https://img-blog.csdnimg.cn/direct/50678457c0024e0d831fa142cd692431.png)
查看http服务的目录文件
![9f56260780d54bf597538dfbc3db59c4.png](https://img-blog.csdnimg.cn/direct/9f56260780d54bf597538dfbc3db59c4.png)
在构建1.1项目
![7540ac54b8d14ffb89b8eb687615c0a0.png](https://img-blog.csdnimg.cn/direct/7540ac54b8d14ffb89b8eb687615c0a0.png)
![240ab6eaa2ae4fef8d30478948814377.png](https://img-blog.csdnimg.cn/direct/240ab6eaa2ae4fef8d30478948814377.png)
此时访问该项目的http服务路径,就能显示版本文件压缩包和md5文件
![008e9d7cca424406819324ebf435fe80.png](https://img-blog.csdnimg.cn/direct/008e9d7cca424406819324ebf435fe80.png)
在web应用服务器部署http服务,用来获取jenkins服务器http中的项目包,解压自己的项目,并且检查最新版本
安装http服务和Python环境
![f5e955fb46804f8d9e0e0b57aa8ad77e.png](https://img-blog.csdnimg.cn/direct/f5e955fb46804f8d9e0e0b57aa8ad77e.png)
创建download(复制下载tar包)和deploy(部署指定的项目)目录
![fae79f2866444752acac6485ffb27f5c.png](https://img-blog.csdnimg.cn/direct/fae79f2866444752acac6485ffb27f5c.png)
当没有web服务器中没有部署过项目,或者项目的版本号不一致时需要从jenkins上下载tar包
![d4e1b1a9a3bf45f8b63da3e11a55dc92.png](https://img-blog.csdnimg.cn/direct/d4e1b1a9a3bf45f8b63da3e11a55dc92.png)
![b1dbe79dccc1401194d6c0b95c783057.png](https://img-blog.csdnimg.cn/direct/b1dbe79dccc1401194d6c0b95c783057.png)
全部代码
import os,requests,hashlib,tarfile
#web_ver_path:web服务器的version.txt文件路径
#ver_url:jenkins服务器的version.txt文件的URL路径
def has_new_ver(web_ver_path,ver_url):if os.path.exists(web_ver_path) == False:return True #没有该路径,表示没有该项目文件,需要下载with open(web_ver_path,mode='r') as f:local_ver = f.read()#读取本地的版本号response = requests.get(ver_url)if local_ver != response.text:return True #版本号不同需要下载return False
def file_is_ok(web_tar_path,jenkins_tar_md5_url):m=hashlib.md5()with open(web_tar_path,mode='rb') as f:while True:data = f.read(4096)if len(data) == 0:breakm.update(data)resp = requests.get(jenkins_tar_md5_url)#去掉换行符if resp.text.strip() == m.hexdigest():return Truereturn False
def deploy(web_tar_path,dest,web_deploy):tar = tarfile.open(web_tar_path,mode="r")tar.extractall(path=web_deploy)tar.close()#截取项目名file_name = web_tar_path.split("/")[-1][:-7]deploy_dir = os.path.join(web_deploy,file_name)#创建软连接if os.path.exists(dest) == True:os.remove(dest)os.symlink(deploy_dir,dest)
if __name__ == '__main__':web_ver_path='/var/www/deploy/version.txt'ver_url='http://192.168.10.30/deploy/version.txt'if has_new_ver(web_ver_path,ver_url) == False:print('没有新版本,不需要下载')exit()resp = requests.get(ver_url)#jenkins_tar_url:获取jenkins的tar包URL路径#web_tar_path:web下载tar的路径jenkins_tar_url=f'http://192.168.10.30/deploy/packages/myproject-{resp.text}.tar.gz'web_tar_path=f'/var/www/download/myproject-{resp.text}.tar.gz'#下载tar包with open(web_tar_path,mode='wb') as f:f.write(requests.get(jenkins_tar_url).content)#计算md5值的函数jenkins_tar_md5_url=f'http://192.168.10.30/deploy/packages/myproject-{resp.text}.tar.gz.md5'if file_is_ok(web_tar_path,jenkins_tar_md5_url) == False:print('资源不完整')os.remove(web_tar_path)#项目部署dest = '/var/www/html/current' #软连接web_deploy = '/var/www/deploy' #部署目录deploy(web_tar_path,dest,web_deploy)#更新版本文件if os.path.exists(web_ver_path) == True:os.remove(web_ver_path)with open(web_ver_path,mode='w') as fw:fw.write(resp.text)
![5af76c47c31845a9b5923bd9ba00e3a4.png](https://img-blog.csdnimg.cn/direct/5af76c47c31845a9b5923bd9ba00e3a4.png)
执行该脚本
![c1ccdd2b73a84186b812ca3ed33afb9b.png](https://img-blog.csdnimg.cn/direct/c1ccdd2b73a84186b812ca3ed33afb9b.png)
访问web服务器
![2ef0c71f4b444ead945839ca951b6f84.png](https://img-blog.csdnimg.cn/direct/2ef0c71f4b444ead945839ca951b6f84.png)
此时在deploy主机中添加文件打标签为1.2
![8c6585a5e83548db8b9c83f7a2ec492b.png](https://img-blog.csdnimg.cn/direct/8c6585a5e83548db8b9c83f7a2ec492b.png)
在jenkins上拉取项目
![f273de8fa53f4f689d4ced9ba91b6b03.png](https://img-blog.csdnimg.cn/direct/f273de8fa53f4f689d4ced9ba91b6b03.png)
执行该脚本
![af7e026be3884675a729bb3eada1a656.png](https://img-blog.csdnimg.cn/direct/af7e026be3884675a729bb3eada1a656.png)
刷新web服务器的浏览器网址
![dc84886f692e4dca8bbb2f1dc4cbfa82.png](https://img-blog.csdnimg.cn/direct/dc84886f692e4dca8bbb2f1dc4cbfa82.png)
这篇关于GitLab、jenkins的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!