GitLab、jenkins

Gitlab服务器:192.168.10.20
jenkins服务器:192.168.10.30
web应用服务器:192.168.10.100
通过容器部署gitlab:
安装容器管理软件podman
d65cbead2c4541869dfdaebf8dd587cb.png
c608cb975db747e0962951df925f4151.png
修改主机的22端口,该gitlab软件包中会使用到该端口
abdf3aacc5f24f4695be45753fc5bb10.png
gitlab容器需要使用/etc/resolv.conf文件
0a081735ee08440fa6ba790d7139d1c6.png
导入镜像
697a1fd144d84f28bb81fc104f96f39e.png
将容器中的目录和宿主机的目录映射保存数据
9027ea3707144516a5aa827af2e3f58d.png
-d后台运行。-h gitlab设置容器的主机名。--name gitlab是podman ps查看到的容器名;-p指定宿主机和容器关联的端口号,当访问宿主机443/80/22端口时,这样的请求就发给容器的相关端口; --restart always是开机自启;-v是映射路径,将容器中指定的路径,映射到宿主机,以便保存容器产生的数据;最后的gitlab_zh是镜像名。
88762e2514064c75891bc677980e0877.png
等待一会,访问该IP地址
3154a633586c4d019740e4c9f46f1605.png
默认以root登录,修改密码为1234.com
20a787fb51b842429704f8f9a6ea60d1.png
efefa2bdc0d24c18978912b7b4c401b4.png
91c4c6a8a142479396767ffdb8bf7200.png
修改登录页面
060fae648da84c5393b8b01717c01457.png
c9ec7aaaf979496b8c1f93cf24bd82a9.png
重新登录查看页面
1ef527f58687440ca5607334eeb1adb2.png
user1为root用户
048fe3a22c4a4e29aaf0c4920fe45530.png
eb6b7902104b437abd672d0bb7ca1316.png
创建用户
ac958499df6d4d3fbff6576f01ed2594.png
286d88d806fd488a8c858a33f769e0ed.png
给用户设置默认的登录密码
5ed3988283e34f4ea02ded19f7dfb8bf.png
3a0ea31378bc4d87a6cba38f5fc42bed.png
创建组
696185963f9f4944864505ef1b2ee4bf.png
dc83eb0276bc4511a4bf3ccac58679ab.png
给组添加用户
b6f1c49d47d34f48bd1ecb4a7cda4d99.png
318790cb6cad4316a5a352020c4743ce.png
创建项目
18c4fb237dc947ea992c716ade484ab9.png
0ff08b5c2fba4ebc98f363db215817d7.png
f502369b27e94bea89a60fb6b5ae403e.png
使用jack用户登录,管理项目
f1ff591d83dc46728301ca1de992c1e2.png
第一次登录需要重新设置密码
74218db9b5d64eef9bcc89dec5b6c49c.png
重新登录
c0bd7ca7ef9444a4ac7a9b0856033894.png
1e5b476fed00479cb2788313309e007d.png
点击项目
54a976cebb9f4fe2b23730a42139f504.png
复制链接
b16e883d7cfd4477925520b03c32e23b.png
http://gitlab/devops/myproject.git将链接中的gitlab修改为gitlab服务虚拟主机的IP地址
http://192.168.10.20/devops/myproject.git
在develop主机上克隆该myproject项目,在本地仓库中会有远程分支(origin)来记录远程仓库的地址。
e7f57ee2820748ed84b09eda04e842a0.png
在myproject目录中创建文件并且创建快照
353c8a8019874a09a780fad31e6b2535.png
添加文件并打快照
daeb13b02c9a4c79b25780bcd4c36a7f.png
git remote -v :查看远程分支
934b867da9984bc4b521cd2646e27ed1.png
push:推送本地的代码
d093d89c521144b9b69b559f8faa270b.png
刷新Gitlab页面
284eda187a0c416bac3dfbb30c7b022f.png
添加hosts文件
ff154aff92df4157aa29ad7ebdd371fd.png
此时也可以不需要加-u 指定远程仓库分支,也能push成功
17ce04cf9aa04f2d9a3bd9e6cebf6040.png
a230ffdfa4da44e1b946b561b7825fc5.png
将远程仓库的代码pull,拉取下来
先将远程仓库克隆
98049b11948c4d4f94d18d54ffcb7fb6.png
在root下面的仓库添加一个新文件,打快照上传到远程仓库
64c3347b4cd24ca6bb476246f0290709.png
5a54756eeafc4166a7e8c5734e43d64e.png
78af2a461e3142a5af58aca0fb0b6454.png
在/var/tmp下将远程仓库中没有的文件,拉取下来
此时没有passwd文件
8692202dc57543bbaee5ae11beeaa65e.png
git pull:拉取文件
1d8659b1ff784cae916f89babf33f848.png
创建公钥
577a821d9adf4b30a64e873d1efe389d.png
查看密钥,复制公钥
4b41d63a5fb54ac590256ef70113885b.png
选择设置
12bec8d23dd24910aa504bbf59e094e7.png
选择ssh密钥
0cb1682784a94c208ff51629ec7f646f.png
7f33aa7fd3ea4d388a95cb96f34e4b21.png
将复制的公钥拷贝到密钥框中
c44de6f2c2794e18b6be5b1ec70c2261.png
00a82820d6b848ab9535d7ed75369e87.png
此时在develop主机中myproject仓库中的记录的远程仓库路径为http协议,而免密的是ssh协议,所以需要把origin分支删除
ef37da9763784917aba187254769ff1a.png
创建ssh协议的地址
点击项目
d910bfb2a9b742abb445cce1274aae03.png
选择ssh协议的地址
8035d78edd204ce589c8ab145f9ba3b8.png
git@gitlab:devops/myproject.git将gitlab替换为IP地址
git@192.168.10.20:devops/myproject.git
创建ss地址
1c48f3f98bc144e988d33d38b0e8a173.png
添加文件并创建快照
d48bfeeffd044602a438343bf9cfab9e.png此时push到远程仓库,就不需要用户和密码了
2802d5e723704b8195ee37d082be5222.png
2b7e1360f23e4b0fa09af21403f3f2a7.png
练习:
1.在gitlab上新建名为mytest的项目,为devops组创建,可见等级为公开
2.将192.168.10.10 (develop服务器,以自己的ip为准)上的mytest项目关联到gitlab的mytest,以ssh方式关联
3.在192.168.10.10 (develop服务器,以自己的ip为准)上,把mytest目录中文件上传
以root用户创建项目
d09feebe0771466c915160162f0ca981.png
c3c4056eed204930921734196363e11f.png
37bb330a76b442b5a3d5e6c4f0cb1588.png
git@gitlab:devops/mytest.git修改为git@192.168.10.20:devops/mytest.git
将develop主机的mytest项目添加远程仓库的地址记录
ab7b147ebfcb4400814cd285a9ea8a55.png
上传文件到远程仓库
7a02f98b29e2411cbeb5ca015f3ad2b8.png
d16cc9c58c7d434897c8178533e30632.png
设置自动开启gitlab服务,给文件添加x权限
d566f1a8d7434d2b8a537cc0594403bb.png
173178989c2e4a089a82389a7b6bf2ea.png
CI(持续集成)/CD(持续部署)
项目部署的过程:
CI(程序员--->gitlab--->jenkins)CD(--->应用服务器(python编写自动化脚本))
7d2d2a3adbcd497f9fd37f9d064f3e78.png
安装Jenkins依赖,jenkins是Java程序所以装java,postfix和mailx是邮件程序,jenkins可以通过它们给管理员发邮件
81b63e7b4c1e41e08620eaaa20b50197.png
安装jenkins软件包
67d1f381e8ef4a709e133df52fa6e2a4.png
开启服务
336b6aca433246dfab78b7e99c209897.png
访问jenkins端口号为8080
986a2f75c1d14f319f3f44673fc07555.png
在/var/lib/jenkins/secrets/initialAdminPassword文件中查看密码
90c3c1e76f0643c79303885b2bd14eda.png
输入密码
8c2ee71a8f514e6faa8a59200b56a2ed.png
选择跳过插件安装
976d537c4854445ca165e59eebdd0c8f.png
选择系统自带的管理员用户
4cd483d1810840728096994251851118.png
保存并完成
9a0f431b8c7446f08c9f88c772cfd024.png
7b1264a97fdc4092b60779e2c961c720.png
c46cc292e7df4042aa92594003d57599.png
修改用户密码
ed92f15785ea44229633ad294e55236b.png
dcaea7da5cae4753876c7827b729f883.png
此时密码为123456
34709083866f47c58e4e89e1ff9bf4e9.png
2ef2170451804e9d8c5d84426283b709.png
安装插件
3f0f81d3287d4f2caa5d7ad4aaff4077.png
将解压的插件复制到/var/lib/jenkins/plugins/目录下面
3f9ea342a67049eea262ac77ba7fa937.png
重启jenkins服务
53e19d9da95d45a5a88fee69090ced0f.png
刷新页面此时语言就有中文显示
469f79e42c5f4c229b5f1dce34c8070c.png
有些英文没有翻译
75f44e2c4b284ef4a84f41162fd18b78.png
给当前的myproject项目打一个标记
9f54e95ed31f4a7d9dfe546485942cab.png
cb9efa7ffcf140cea15dea03f96990a1.png
添加index.html文件并打快照、打标记
6e899a1a0ecb4e998961789f12fa3fef.png
将标签传递给远程仓库
22010d2d58994d4aa321991cd6c55278.png
9fd49f96071a4f8ab6d01375c78bcea3.png
f27052e2b0214ff68a4341bbcb64228f.png
使用jenkins将指定版本的代码下载下来
在jenkins创建任务
0bd02dca229b466aaea67363afab3633.png
259bdc56d9e346bd8d6599df0dc951fa.png
ae651344e9f247908f2c69e0213d7a3a.png
12d11b974b3c483a9d0ba19988516b76.png
bf4f93568a104415ab4d7c0a81b12fe3.png
将jenkins创建的任务和远程仓库对接,使用myprojecthttp的地址 http:/192.168.10.20/devops/myproject.git
a3092dacdd154ee9a835b40c80abae8d.png
指定分支使用定义的web变量来获取
f95a4702abe64842b60d1ad750714e3c.png
通过web变量来构建项目(将指定标签的版本拉取到jenkins)
d85e05d553af4e51b2a8b314e3fc49b8.png
4872dd931f26459db53a4f4d8c8f75ac.png
666ca791590c48d19df8d90d992788e5.png
查看jenkins拉取远程仓库的相关操作
97d6e0d9ca714c4ea30e7b684fd86bfb.png
1fd6d6eb06144583bfce52654d9e5bdb.png
查看拉取下来的文件,拉取的是1.0版本没有index文件
f21800fd133d46698188d97c1c72afed.png
拉取1.1的版本
a9e8003473e6436d95274a635c768dc2.png
149b567471f64944a5ab665869e4ce44.png
此时覆盖了1.0的版本文件
2c7c5b2c2aad4ceb8c0a20ba544c53d7.png
让不同版本存放在不同的目录,创建项目的子目录存放不同的版本
bc65111bfe2b466eac2335bd96fd8752.png
e97d61b3ac584a81b086dffb00bead63.png
7e583c9222774abd9087461bfbd2e5c3.png
将已经构建拉取的myproject项目删除
37444791a153404d8ae6774c828e8ee3.png
重新构建项目
79303616d5f6454495d5336bc3f8cb1f.png
38f8b0640cb14747ae9678fcccf85c05.png
b8144ff98b3a4ea5872e2a28b6a65c8c.png
4d8b958a612d4016b7710def904806bb.png
查看项目
5f901ca2d491493b8ce418c47f20fadc.png
给应用服务器使用,将指定版本的目录打包
在jenkins安装http服务。用来响应应用服务器的http服务请求
570f15c76d7a4e8196be8a8b43b7544d.png
b8d3e64e12714e7aafce44a0c075cc6a.png
将版本号打包
91923628e26f4b67b179f392b9d81937.png
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
将jenkins的拉取的项目删除,重新构建项目
606bb8c595294532a1516eecc467b796.png
c5e1dc621ac643b3a995edf3f6a332b2.png
50ae2eb9d9de4291baea50102911d612.png
12570bd1ed38452aaa68e9e8f9ab054e.png
50678457c0024e0d831fa142cd692431.png
查看http服务的目录文件
9f56260780d54bf597538dfbc3db59c4.png
在构建1.1项目
7540ac54b8d14ffb89b8eb687615c0a0.png
240ab6eaa2ae4fef8d30478948814377.png
此时访问该项目的http服务路径,就能显示版本文件压缩包和md5文件
008e9d7cca424406819324ebf435fe80.png
在web应用服务器部署http服务,用来获取jenkins服务器http中的项目包,解压自己的项目,并且检查最新版本
安装http服务和Python环境
f5e955fb46804f8d9e0e0b57aa8ad77e.png
创建download(复制下载tar包)和deploy(部署指定的项目)目录
fae79f2866444752acac6485ffb27f5c.png
当没有web服务器中没有部署过项目,或者项目的版本号不一致时需要从jenkins上下载tar包
d4e1b1a9a3bf45f8b63da3e11a55dc92.png
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
执行该脚本
c1ccdd2b73a84186b812ca3ed33afb9b.png
访问web服务器
2ef0c71f4b444ead945839ca951b6f84.png
此时在deploy主机中添加文件打标签为1.2
8c6585a5e83548db8b9c83f7a2ec492b.png
在jenkins上拉取项目
f273de8fa53f4f689d4ced9ba91b6b03.png
执行该脚本
af7e026be3884675a729bb3eada1a656.png
刷新web服务器的浏览器网址
dc84886f692e4dca8bbb2f1dc4cbfa82.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/854093.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一二三应用开发平台应用开发示例(3)——生成库表及后端代码

生成库表 前端页面的配置,也就是视图功能,我们先放一放,来看看生成库表和后端代码。 关闭实体配置界面,回到实体列表,勾选“文件夹”实体,点击“生成库表”,并确定。 系统提示成功后&#xff…

【每天学会一个渗透测试工具】dirsearch安装及使用指南

🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 ✨dirsearch介绍 dirsearch安装包百度网盘 disearch是基于Python开发的,因此需要确保你的系统中已经安装了pyth…

flstudio怎么调中文

FL Studio设置中文的步骤如下: 打开FL Studio:首先,需要打开FL Studio编曲软件。 进入常规设置:在软件顶部菜单栏中,选择“OPTIONS”,然后点击“General setting”,进入常规设置窗口。 切换语言…

经典电源电路基础(变压-整流-滤波-稳压)

1.电源电路的功能和组成 电子电路中的电源一般是低压直流电,先把220v交流电变换成低压直流电,再用整流电路变成脉动的直流电,最后用滤波电路滤除掉脉动直流中的交流成分后才能得到直流电。有的电子设备对电源的质量要求很高,所以…

JavaWeb之初识Tomcat

Tomcat 轻量级应用服务器、JSP、Servlet Tomcat目录结构 在IDEA中创建web项目 在这里不使用maven构建项目,这种方式后面会更新 新建一个java项目File -> Project Settings -> Facets -> -> Web -> OK ( 此时src目录下有一个web目录 )Edit ->…

[个人感悟] 缓存应该考察哪些问题?

前言 缓存, 根据冯诺依曼计算机模型, 无非是为了更高效的交互, 使用内存IO替换本地磁盘IO. 又因为内存的稀缺性, 其必然存储的是热点数据, 且较小的数据. [虽然直至今日, 已有使用缓存作为数据库的使用, 但是与磁盘IO相比, 其价格仍是数倍之多.] 当涉及缓存问题时, 又分为本地…

调用第三方系统的签名设计与校验实例讲解与实践

在现代软件开发中,调用第三方系统API已经成为常见需求。为了保证数据传输的安全性和完整性,许多API采用了签名机制。本文将详细讲解如何设计与校验调用第三方系统的签名,以确保双方通信的安全和可靠。 #### 一、签名机制的意义 签名机制主要…

C语言之顺序结构以及程序调试的debug宏

一:C语言中的顺序结构 1:最浅显的顺序结构理解:三种结构之一 (1)代码执行的时候没有遇到判断跳转或者循环,默认是顺序执行的。执行完上一句则开始执行下一句。 (2)顺序结构说明cpu的工作状态&a…

类Copy方法:BeanUtils.copyProperties

类Copy方法:BeanUtils.copyProperties 需求场景 比如有时候我们想要把数据库里面的数据导出到excel表中,比如想要把数据库中的用户数据导出到excel表格中; 假设我们程序代码中与数据库对接的实体类是User,用于展示到前端的实体类…

Fiddler抓包工具介绍

下载 下载:Web Debugging Proxy and Troubleshooting Tools|Fiddler 进去要填一个表 汉化版 百度网盘 请输入提取码 提取码:xq9t 下载过附件之后分别把两个文件 点开fiddler就ok了 配置https fiddler要想抓到https包(解密的),点击tools->options勾选三个对…

总结之Docker(四)——镜像修改非ROOT用户权限后生成新镜像并发布

Docker拉去目标镜像 docker pull redis:6.2.5如果出现拉去过程超时,或者连接失败。 添加镜像加速器,以阿里云为例,阿里云目前推广提供镜像加速器,需要登录。 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 生成…

HMI(人机交互)应用的15大领域,欢迎补充。

HMI(Human-Machine Interface,人机界面)可以应用于许多不同的场景和行业,包括但不限于以下几个方面: 工业控制系统:HMI在工业生产中广泛应用,用于监控和控制生产过程。例如,工厂中的…

NewStarCTF_RE(week1,2)

[NewStarCTF 2023 公开赛道]easy_RE ida 可能会把 一个数组或字符串拆开,可以通过计算地址,知道是一起的 也有的会藏在汇编窗口 Segments IDA的Segments窗口 :shiftf7 https://www.cnblogs.com/sch01ar/p/9477697.html ida 各种窗口也是需要…

AMD平台,5600X+6650XT,虚拟机安装macOS 14(2024年6月)

AMD平台安装macOS 14的麻烦,要比Intel平台多的多,由于macOS从13开始,对CPU寄存器的读取进行了改变,导致AMD平台只要安装完macOS 13及以后版本,开机后就报五国语言错误,不断重启。改vmx文件,被证…

mongodb command

1. start and stop ./mongod --dbpath -dbpath /data/shard1/db --logpath -dbpath /data/shard1/db/logs/mongodb.log --fork mongod --shutdown --dbpath /data/shard1/db MongoDB基础篇-03-启动与关闭_mongodb启动和关闭-CSDN博客 2. 查看分片数据分布 mongo mongo01.c…

用React编写一个密码组件表单

theme: condensed-night-purple highlight: atelier-cave-light 背景介绍 我们在使用网站或者应用程序的登录界面或创建帐户界面时,往往避免不了需要用户输入密码这一步骤,而用户是否可以选择看见他们输入的密码是十分重要的一项功能。尤其是在当输入的…

Java面向对象-final关键字

Java面向对象-final关键字 一、final1、修饰变量2、修饰方法3、修饰类4、案例 一、final 可以修饰变量、方法、类 1、修饰变量 final修饰一个变量,变量的值不可以改变,这个变量就变成一个字符常量,约定俗称的规定:名字大写。 f…

【flink实战】flink-connector-mysql-cdc导致mysql连接器报类型转换错误

文章目录 一. 报错现象二. 方案二:重新编译打包flink-connector-cdc1. 排查脚本2. 重新编译打包flink-sql-connector-mysql-cdc-2.4.0.jar3. 测试flink环境 三. 方案一:改造flink连接器 一. 报错现象 flink sql任务是:mysql到hdfs的离线任务&…

IPTCP知识

1. IP: IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”IP地址分类:A类地址、B类地址、C类地址、D类地址、E类地址 A类地址分配给规模特别大的网络使用,B类地址分配给一般的中型网络,C类地址分配给小型网…