欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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 Pipeline+Supervisor Python项目CI/CD实战 (二)
根据上图,我们可以清晰当看清楚两种部署模式,多个项目公用一个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
Gitlab Pipeline+Supervisor Python项目CI/CD实战 (二)
记录注册url和token
Gitlab Pipeline+Supervisor Python项目CI/CD实战 (二)

  • 在gitlabrunner服务器进行注册
# gitlab runner注册到平台
sudo gitlab-ci-multi-runner register

Gitlab Pipeline+Supervisor Python项目CI/CD实战 (二)
此处我们选择的为单机shell执行,如果为docker可以选择docker,注册完成后可以返回gitlab web管理界面查看已经注册的runner。
Gitlab Pipeline+Supervisor Python项目CI/CD实战 (二)

也可以对runner进行配置。

  • 配置runner

可以勾选Active,runner为公用对时候,暂停Runner不接受新的jobs
如果没有制定tag,可以运行在未指定tag的作业。
Gitlab Pipeline+Supervisor Python项目CI/CD实战 (二)

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
    Gitlab Pipeline+Supervisor Python项目CI/CD实战 (二)
    Gitlab Pipeline+Supervisor Python项目CI/CD实战 (二)
  • 查看具体jobs信息
    Gitlab Pipeline+Supervisor Python项目CI/CD实战 (二)
    如果那个jobs执行失败可以进行手动retry。
  • 查看CI/CD charts

Gitlab Pipeline+Supervisor Python项目CI/CD实战 (二)
charts直观的展示来构建到成功及失败图表。

  • 查看构建邮件
    Gitlab Pipeline+Supervisor Python项目CI/CD实战 (二)
  • 在des-server查看项目

Gitlab Pipeline+Supervisor Python项目CI/CD实战 (二)

  • 通过web界面查看

Gitlab Pipeline+Supervisor Python项目CI/CD实战 (二)
至此一个完整到Gitlab runner就配置完成。

四.总结反思

  • gitlab-runner配置简单,与gitlab集成友好,无需单独搭建构建平台,告警有gitalb发送。当新建一个项目的时候,不需要配置webhook回调地址,将部署继承在代码的.gitlab-ci.yml 中易于维护管理。
  • gitlab-ci/cd没有代码审计,需要单独配置,随着业务增加,团队扩充需要单独构建代码审计平台。
  • 如果小型Devops团队建议利用Gitlab CI/CD方便管理维护,如果大型gitlab ci/cd无法满足可以结合jenkins来实现CI/CD。

五.参考资料