- 本实验采用华为云ECS进行,模拟真实工作环境
- 当然本地电脑环境配置达标,也可以在本地电脑使用VMware虚拟机完成
- 本实验供需4台云主机,全部使用Rocky Linux8.5操作系统,2vCPU,4G内存
- 具体要求如下:
项目架构图
-
它是一个开源的git仓库服务器。用于实现代码集中托管
-
分为企业版和CE社区版
-
部署方式:软件包部署、容器部署
- 云主机192.168.0.20,远程连接时需要连接其对应的公网IP地址
- 将2024-AI大模型Java全链路工程师环境资料/第四模块/gitlab_zh.tar拷贝到gitlab服务器的/root
- 将2024-AI大模型Java全链路工程师环境资料/第四模块/docker文件夹拷贝到gitlab服务器的/root
- 通过容器部署GitLab服务
修改gitlab服务器的的sshd服务端口号为8022,因为gitlab容器也要用到22端口,有冲突。
vim +17是指打开配置文件时,光标直接定位到第17行。
gitlab容器运行需要/etc/resolv.conf文件,如果该文件已存在,则无需创建
- 导入镜像
- 一个镜像可以创建很多容器。镜像是只读的,容器是可以改变的。
- 容器相当于是精简的虚拟机,可以像虚拟机一样,对外提供服务。
- 保障数据完整性
- 为了删容器,不丢失数据,需要把容器需要的数据保存在宿主机上。
- 在哪台主机上启动容器,哪台主机就是宿主机。
- 创建容器
- -d后台运行
- -h gitlab设置容器的主机名
- –name gitlab是docker ps查看到的容器名
- -p指定发布的端口号,当访问宿主机443/80/22端口时,这样的请求就发给容器的相关端口
- –restart always是开机自启
- -v是映射路径,将容器中指定的路径,映射到宿主机,以便保存容器产生的数据
- 最后的gitlab_zh是镜像名
附:如果容启动失败,再次创建有以下错误:
则:
配置gitlab
- 第一次登陆‑时,要求改密码。密码需要是复杂密码,如1234.com。修改之后,登陆的用户名是root。
- 修改外观设置
点击头像–>退出,重新登录验证
- 用户:为使用gitlab的用户创建的账号。
- 组:用户的集合,可以为部门创建组。将来可以在项目上为组授权,组中所有的用户都会得到相应的权限。
- 项目:用于保存代码文件的空间。
- 用户、组、项目之间的关系如下
- 创建用户
- 用户名:jerry
- 密码:1234.com
填写截图上的几项后,其他使用默认配置,点保存。
创建好用户后,点击编辑,可以为他/她设置密码:
-
保存修改后,退出当前账号,使用新账号jerry与其密码1234.com登陆测试。
-
第一次登陆时,也是要求修改密码,新密码可以设置与旧密码一样。
-
新建的jerry用户因为权限较小,所以看到的界面,没有root的功能多。
- 创建组,注意,需要使用root账号创建,这里需要切换回root账户
- 将jerry用户加到devops组中,角色是"主程序员"
- 创建项目,管理员root操作
- 切换为jerry用户,查看项目是否负责
-
查看项目路径,采用http方式上传
-
查看项目说明
- 在客户端develop服务器(192.168.0.10,连接其公网IP地址)上下载项目,编写代码并上传
从gitlab服务器复制地址之后,需要将gitlab单词改为自己gitlab服务器的公网IP地址
windows客户端也可以使用git clone克隆远程仓库,提前安装git客户端(安装包在2024-AI大模型Java全链路工程师环境资料/第四模块/cicd中)
如果是刚刚安装的git软件需要首先定义全局配置,方可继续使用(执行一次即可)
使用develop服务器编写README.txt文件,并上传至远程仓库
重新操作编写代码,并提交远程仓库
另一个客户端Windows拉取新代码,并且上传自己的代码(需要windows安装好git客户端)
Windows本地仓库中已经多出了数据
Windows上传数据至远程仓库,编写win.txt文件,内容为"Here is Windows file."
develop服务器拉取新代码,验证是否能够同步Win.txt
- CI:持续集成(Continuous Integration)
- CD:持续交付(Continuous Delivery/Deployment)
软件程序上线流程
- 程序员将代码上传到gitlab服务器
- SRE工程师,通过jenkins服务器自动下载gitlab上的代码
- SRE工程师编写自动部署到服务器上的脚本
安装Jenkins服务器
- jenkins服务器操作(192.168.0.30,需要远程它的公网IP地址)
- 访问http://jenkins服务器公网IP:8080,进行初始化
把查看到的密码粘贴到文本框中,如下:
- 不用创建管理员,使用自带的admin
- 修改admin密码
使用admin用户,密码123456登录jenkins
- 安装插件:jenkins的很多功能都是能过插件实现的,比如发邮件、比如中文支持
- develop服务器操作
- 可以在git中使用tag标记将某一次commit提交标识为某一版本
在gitlab上查看标记
- 新建任务
- 参数化构建过程中,"名称"是自己定义的变量名,用于标识tag或分支
git仓库地址,在gitlab上找到myproject仓库的http地址,注意将gitlab名称改为IP地址
指定分支构建的时候,使用上面步骤创建的变量$web
- 构建测试
在jenkins服务器查看内容,查看是否下载成功
- 此时有个问题,1.1版本的代码会覆盖1.0版本的代码,无法实现多个版本代码并存
- 这个问题可以使用jenkins子目录的方式解决
- jenkins下载不同的版本到自己的子目录,不共享相同目录
新增时,如果没有中文,英文是"checkout to a sub directory"
测试
执行多次构建,构建不同版本
查看下载目录
自动化部署流程
- 程序员编写代码,推送到gitlab服务器
- Jenkins服务器从gitlab上下载代码
- Jenkins处理下载的代码
-
- 删除下载目录的版本库(.git本地仓库)
- 将下载的代码打包
- 计算程序压缩包的md5值
- 在Jenkins上安装httpd服务,共享程序压缩包
-
- web服务器下载软件包,并应用(通过脚本实现)
- 访问测试
- 在jenkins上安装、配置httpd共享服务器
配置jenkins把gitlab下载的代码打包
- 在jenkins上修改myproject项目
测试修改的任务
浏览器访问:http://jenkins公网IP/deploy/packages/即可看到打包的代码
编写自动上线脚本
- 下载软件包
- 检查软件包是否损坏
- 解压、部署到web服务器
浏览器访问http://web服务器公网IP/current 可以看到部署的文件页面