赤峰中国建设招标网站,网页设计素材网站推荐,vps网站被镜像,网站建设公司词Gitlab服务器#xff1a;192.168.10.20 jenkins服务器#xff1a;192.168.10.30 web应用服务器#xff1a;192.168.10.100 通过容器部署gitlab#xff1a; 安装容器管理软件podman 修改主机的22端口#xff0c;该gitlab软件包中会使用到该端口 gitlab容器需要使用/etc/res…Gitlab服务器192.168.10.20 jenkins服务器192.168.10.30 web应用服务器192.168.10.100 通过容器部署gitlab 安装容器管理软件podman 修改主机的22端口该gitlab软件包中会使用到该端口 gitlab容器需要使用/etc/resolv.conf文件 导入镜像 将容器中的目录和宿主机的目录映射保存数据 -d后台运行。-h gitlab设置容器的主机名。--name gitlab是podman ps查看到的容器名;-p指定宿主机和容器关联的端口号当访问宿主机443/80/22端口时这样的请求就发给容器的相关端口; --restart always是开机自启;-v是映射路径,将容器中指定的路径,映射到宿主机以便保存容器产生的数据;最后的gitlab_zh是镜像名。 等待一会访问该IP地址 默认以root登录修改密码为1234.com 修改登录页面 重新登录查看页面 user1为root用户 创建用户 给用户设置默认的登录密码 创建组 给组添加用户 创建项目 使用jack用户登录管理项目 第一次登录需要重新设置密码 重新登录 点击项目 复制链接 http://gitlab/devops/myproject.git将链接中的gitlab修改为gitlab服务虚拟主机的IP地址 http://192.168.10.20/devops/myproject.git 在develop主机上克隆该myproject项目在本地仓库中会有远程分支origin来记录远程仓库的地址。 在myproject目录中创建文件并且创建快照 添加文件并打快照 git remote -v :查看远程分支 push:推送本地的代码 刷新Gitlab页面 添加hosts文件 此时也可以不需要加-u 指定远程仓库分支也能push成功 将远程仓库的代码pull拉取下来 先将远程仓库克隆 在root下面的仓库添加一个新文件打快照上传到远程仓库 在/var/tmp下将远程仓库中没有的文件拉取下来 此时没有passwd文件 git pull拉取文件 创建公钥 查看密钥复制公钥 选择设置 选择ssh密钥 将复制的公钥拷贝到密钥框中 此时在develop主机中myproject仓库中的记录的远程仓库路径为http协议而免密的是ssh协议所以需要把origin分支删除 创建ssh协议的地址 点击项目 选择ssh协议的地址 gitgitlab:devops/myproject.git将gitlab替换为IP地址 git192.168.10.20:devops/myproject.git 创建ss地址 添加文件并创建快照 此时push到远程仓库就不需要用户和密码了 练习 1.在gitlab上新建名为mytest的项目为devops组创建可见等级为公开 2.将192.168.10.10 (develop服务器,以自己的ip为准)上的mytest项目关联到gitlab的mytest以ssh方式关联 3.在192.168.10.10 (develop服务器,以自己的ip为准)上,把mytest目录中文件上传 以root用户创建项目 gitgitlab:devops/mytest.git修改为git192.168.10.20:devops/mytest.git 将develop主机的mytest项目添加远程仓库的地址记录 上传文件到远程仓库 设置自动开启gitlab服务给文件添加x权限 CI(持续集成)/CD(持续部署) 项目部署的过程: CI(程序员---gitlab---jenkins)CD(---应用服务器(python编写自动化脚本)) 安装Jenkins依赖jenkins是Java程序所以装java,postfix和mailx是邮件程序jenkins可以通过它们给管理员发邮件 安装jenkins软件包 开启服务 访问jenkins端口号为8080 在/var/lib/jenkins/secrets/initialAdminPassword文件中查看密码 输入密码 选择跳过插件安装 选择系统自带的管理员用户 保存并完成 修改用户密码 此时密码为123456 安装插件 将解压的插件复制到/var/lib/jenkins/plugins/目录下面 重启jenkins服务 刷新页面此时语言就有中文显示 有些英文没有翻译 给当前的myproject项目打一个标记 添加index.html文件并打快照、打标记 将标签传递给远程仓库 使用jenkins将指定版本的代码下载下来 在jenkins创建任务 将jenkins创建的任务和远程仓库对接使用myprojecthttp的地址 http:/192.168.10.20/devops/myproject.git 指定分支使用定义的web变量来获取 通过web变量来构建项目将指定标签的版本拉取到jenkins 查看jenkins拉取远程仓库的相关操作 查看拉取下来的文件拉取的是1.0版本没有index文件 拉取1.1的版本 此时覆盖了1.0的版本文件 让不同版本存放在不同的目录创建项目的子目录存放不同的版本 将已经构建拉取的myproject项目删除 重新构建项目 查看项目 给应用服务器使用将指定版本的目录打包 在jenkins安装http服务。用来响应应用服务器的http服务请求 将版本号打包 执行的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 将jenkins的拉取的项目删除重新构建项目 查看http服务的目录文件 在构建1.1项目 此时访问该项目的http服务路径就能显示版本文件压缩包和md5文件 在web应用服务器部署http服务用来获取jenkins服务器http中的项目包解压自己的项目并且检查最新版本 安装http服务和Python环境 创建download复制下载tar包和deploy部署指定的项目目录 当没有web服务器中没有部署过项目或者项目的版本号不一致时需要从jenkins上下载tar包 全部代码 import os,requests,hashlib,tarfile
#web_ver_path:web服务器的version.txt文件路径
#ver_urljenkins服务器的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,moder) 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):mhashlib.md5()with open(web_tar_path,moderb) 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,moder)tar.extractall(pathweb_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.txtver_urlhttp://192.168.10.30/deploy/version.txtif has_new_ver(web_ver_path,ver_url) False:print(没有新版本不需要下载)exit()resp requests.get(ver_url)#jenkins_tar_url获取jenkins的tar包URL路径#web_tar_pathweb下载tar的路径jenkins_tar_urlfhttp://192.168.10.30/deploy/packages/myproject-{resp.text}.tar.gzweb_tar_pathf/var/www/download/myproject-{resp.text}.tar.gz#下载tar包with open(web_tar_path,modewb) as f:f.write(requests.get(jenkins_tar_url).content)#计算md5值的函数jenkins_tar_md5_urlfhttp://192.168.10.30/deploy/packages/myproject-{resp.text}.tar.gz.md5if 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,modew) as fw:fw.write(resp.text) 执行该脚本 访问web服务器 此时在deploy主机中添加文件打标签为1.2 在jenkins上拉取项目 执行该脚本 刷新web服务器的浏览器网址