Gitlab Pipeline+Supervisor Python项目CI/CD实战 (二)
程序员文章站
2022-07-15 16:00:46
...
三.实战部署
3.1 服务器列表
名称 | IP | 软件 | 备注 |
---|---|---|---|
gitlab-server | 10.57.61.138 | gitlab-server | Gitlab 服务器 |
gitlab-common-runner | 10.57.61.11 | gitlab-runner | 公用runner服务器 |
Des-server | 172.21.0.10 | miniconda/supervisor | 项目部署服务器 |
3.2 架构图
根据上图,我们可以清晰当看清楚两种部署模式,多个项目公用一个gitlab-runner,和将gitlab-runner部署到目标服务器上。由于存在多个项目,方便后期多项目管理,本次我们利用到为公用gitlab-runner。
3.3 前期准备
- Gitlab-runner服务区的gitlab-runner用户可以免**登录des-server服务器
- Gitlab服务器安装配置
- 在目标服务器安装配置conda虚拟环境
- supervisor部署配置
[program:go2cloud_platform]
command=/data/miniconda3/envs/go2cloud_platform/bin/python /project/go2cloud_platform/runserver start all
user=root
stdout_logfile=/var/log/go2cloud_platform.log
autostart=true
autorestart=true
startsecs=60
stopasgroup=true
ikillasgroup=true
startretries=1
redirect_stderr=true
3.4 配置部署
3.4.1 Gitalb Runner配置
- Gitlab runner安装注册
- gitlab-runner安装
# 配置yum源
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
# 安装runner
sudo yum install -y gitlab-ci-multi-runner
- 开启项目Pipelines
有的项目为开启pipeline,需要手动开启
settings->General->Visibility, project features, permissions->Pipelines
可以配置所有人或此项目到Members可以配置管理Pipeline
- 记录注册信息
settings->CI/CD>Runners
记录注册url和token
- 在gitlabrunner服务器进行注册
# gitlab runner注册到平台
sudo gitlab-ci-multi-runner register
此处我们选择的为单机shell执行,如果为docker可以选择docker,注册完成后可以返回gitlab web管理界面查看已经注册的runner。
也可以对runner进行配置。
- 配置runner
可以勾选Active,runner为公用对时候,暂停Runner不接受新的jobs
如果没有制定tag,可以运行在未指定tag的作业。
3.4.2 .gitlab-ci.yml 编写
stages:
- clean_env # 清理环境及杀死进程
- deploy_src # 部署源码
- install_dependency # 更新依赖
- restart_server # 重启服务
- check_server # 检测服务
variables:
BASE_DIR: "/go2cloud_platform/"
job clean_env_job:
stage: clean_env
script:
- ssh -o stricthostkeychecking=no aaa@qq.com pkill supervisord || true
- ssh -o stricthostkeychecking=no aaa@qq.com killall /data/miniconda3/bin/python || true
- ssh -o stricthostkeychecking=no aaa@qq.com killall /data/miniconda3/envs/go2cloud_platform/bin/python || true
- ssh -o stricthostkeychecking=no aaa@qq.com rm -rf /project${BASE_DIR}*
tags:
- 51common-runner
only:
- dev
when: always
job deploy_src_job:
stage: deploy_src
script:
- scp -r /home/gitlab-runner/builds/QFafrHEq/0/devops/${BASE_DIR}* aaa@qq.com:/project${BASE_DIR}
- ssh -o stricthostkeychecking=no aaa@qq.com cp /project/config/config.yml /project${BASE_DIR}
tags:
- 51common-runner
only:
- dev
when: always
job install_dependency_job:
stage: install_dependency
script:
- ssh -o stricthostkeychecking=no aaa@qq.com /data/miniconda3/envs/go2cloud_platform/bin/python -m pip install -r /project${BASE_DIR}requirements/requirements.txt
tags:
- 51common-runner
only:
- dev
when: manual
job restart_server_job:
stage: restart_server
script:
- ssh -o stricthostkeychecking=no rootaaa@qq.com sleep 7
- ssh -o stricthostkeychecking=no aaa@qq.com supervisord -c /etc/supervisord.conf
- ssh -o stricthostkeychecking=no aaa@qq.com ps -ef |grep supervisord |grep -v grep
tags:
- 51common-runner
only:
- dev
when: always
job check_server_job:
stage: check_server
script:
- ssh -o stricthostkeychecking=no aaa@qq.com sleep 7
- ssh -o stricthostkeychecking=no aaa@qq.com ps -ef|grep "8088"
tags:
- 51common-runner
only:
- dev
when: always
在此我们部署服务分为五个步骤
- 清理环境:可以配置为全部删除目标源代码或这rsync/scp增量覆盖到目标服务器,如果增量部署,需要考虑迁移数据库到重复执行。
- 部署源码:将gitlab-runner服务器pull下来到代码scp到目标服务器到目标部署目录,
- 安装依赖:此处有可能后期更新requirements,配置为manual手动去执行更新,如果有更新,手动去安装。
- 重启服务:此时启动为supervisord服务,启动后可以自动启动配置到项目服务。
- 检测进程:由于此项目为平台为写单元测试,部署上去存在可能代码有异常进程为能正常启动,检测进程是否正常启动可方便为们知道部署是否成功。
项目中到配置指标和变量可以参考:https://docs.gitlab.com/ee/ci/yaml/README.html
- 查看pipeline
- 查看具体jobs信息
如果那个jobs执行失败可以进行手动retry。 - 查看CI/CD charts
charts直观的展示来构建到成功及失败图表。
- 查看构建邮件
- 在des-server查看项目
- 通过web界面查看
至此一个完整到Gitlab runner就配置完成。
四.总结反思
- gitlab-runner配置简单,与gitlab集成友好,无需单独搭建构建平台,告警有gitalb发送。当新建一个项目的时候,不需要配置webhook回调地址,将部署继承在代码的.gitlab-ci.yml 中易于维护管理。
- gitlab-ci/cd没有代码审计,需要单独配置,随着业务增加,团队扩充需要单独构建代码审计平台。
- 如果小型Devops团队建议利用Gitlab CI/CD方便管理维护,如果大型gitlab ci/cd无法满足可以结合jenkins来实现CI/CD。