设计并搭建Python容器化项目的CI/CD流水线

文章目录

  • 前言
  • 一.CI/CD是什么
    • DevOps
  • 二.CI/CD流水线中的组件
    • Jenkins
    • Gogs
  • 三.Python容器化项目的CI/CD流水线设计

前言

本文的内容主要是为Python容器化项目设计一个CI/CD流水线。这个流水线中涉及到的应用有:Gogs,Jenkins,docker,Harbor,Kubernetes。本文会详细讲解如何安装以上几个应用,以及如何进行必要的设置来使流水线能够完成理想的功能。

一.CI/CD是什么

CI/CD是伴随着DevOps开发模式的兴起而产生的一种开发理念。软件开发模式的发展,从最初的瀑布模型,到后来的敏捷开发,而现在最为前沿的开发模式就是DevOps。

DevOps

DevOps(Development和Operations的组合词)是一组过程、方法与系统的统称。DevOps强调重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。

DevOps提出了持续集成(Continuous Integration)、持续交付(Continuous Delivery) 、持续部署(Continuous Deployment) 这几个重要的概念。

  • 持续集成的重点是将各个开发人员的工作集合到一个代码仓库中。通常,每天都要进行几次,主要目的是尽早发现集成错误,使团队更加紧密结合,更好地协作。
  • 持续交付的目的是最小化部署或释放过程中固有的摩擦。它的实现通常能够将构建部署的每个步骤自动化,以便任何时刻能够安全地完成代码发布(理想情况下)。
  • 持续部署是一种更高程度的自动化,无论何时对代码进行重大更改,都会自动进行构建/部署。

DevOps的出现让传统的软件开发和交付方法迅速变得过时。从历史上看,在敏捷时代,大多数公司会每月,每季度,每两年甚至每年发布部署/发布软件。然而,现在,在DevOps时代,每周,每天,甚至每天多次是常态。

二.CI/CD流水线中的组件

一个CI/CD流水线至少需要有一个持续集成工具和一个代码仓库,本文介绍的流水线选用Jenkins和Gogs,下文会详细介绍这两个工具的安装和配置。由于项目采用容器化的部署方式,所以还需要安装docker和kubernetes,而Harbor是一款非常好用的镜像仓库,docker和kubernetes的安装可以参考 使用Rancher搭建Kubernetes集群 ,Harbor的安装可以直接看Harbor官网

Jenkins

Jenkins是一个非常著名的持续集成工具,使用Java开发,主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。Jenkins就像一个管理员,管理着软件集成和部署过程中各个组件的工作,使这个过程更加自动化,减轻开发人员和运维人员的工作负担。Jenkins发展到现在已经非常成熟,众多的开发者为它添加了各种各样的插件,使它几乎能为所有种类的项目做集成和构建。

下面这幅图是Jenkins的插件列表,从右侧的滑块可以看出它的插件之多
设计并搭建Python容器化项目的CI/CD流水线_第1张图片

下面来详细介绍一下Jenkins的安装

首先从 Jenkins官网 下载安装包,进入下载页,选左侧更为稳定的版本

设计并搭建Python容器化项目的CI/CD流水线_第2张图片我才用的是rpm包的安装方式(我的系统是CentOS7.6),安装完成后,先修改Jenkins的配置文件
vim /etc/sysconfig/jenkins

JENKINS_HOME:设置Jenkins的存储目录,Jenkins在构建过程中会下载项目代码,所以这个目录最好还是自己专门定一个。
JENKINS_USER:设置默认用户,不设为root的话会遇到很多小问题,因为Jenkins构建项目需要用到一些组件,比如docker,不使用root用户经常会报权限问题。
JENKINS_PORT:改端口

JENKINS_HOME="/data/jenkins"
JENKINS_USER="root"
JENKINS_PORT="8000" 

启动Jenkins,用浏览器访问

到指定目录下复制密码

设计并搭建Python容器化项目的CI/CD流水线_第3张图片

安装推荐插件

设计并搭建Python容器化项目的CI/CD流水线_第4张图片

安装过程需要等十几到几十分钟,具体看网速

设计并搭建Python容器化项目的CI/CD流水线_第5张图片
创建管理员用户

设计并搭建Python容器化项目的CI/CD流水线_第6张图片
安装完成

设计并搭建Python容器化项目的CI/CD流水线_第7张图片

Gogs

CI/CD流水线中另一个必不可少的组件是代码仓库,代码仓库可以选GitHub,GitLab。如果是在局域网内的话,也可以用Gogs搭建一个代码仓库,轻便快捷,上传和下载速度都很快,非常好用

Gogs使用容器的方式搭建就可以了,输入命令

docker run -di --name=gogs -p 3000:3000 -p 10022:22  -v /var/gogs:/data gogs/gogs

端口映射可以自己定,浏览器中访问

选择数据库选SQLite3,其他数据库类型都比较麻烦,项目不大时这样最简便

设计并搭建Python容器化项目的CI/CD流水线_第8张图片
注意域名必须要改,localhost只能你自己访问,别人访问不了,应用URL那里也记得改一下

设计并搭建Python容器化项目的CI/CD流水线_第9张图片

三.Python容器化项目的CI/CD流水线设计

下图是整个CI/CD流水线的结构图。下面详细介绍下其中重要的几项配置

设计并搭建Python容器化项目的CI/CD流水线_第10张图片
首先将代码上传到Gogs

设计并搭建Python容器化项目的CI/CD流水线_第11张图片

在Jenkins中左侧菜单栏,选择新建Item流水线,选自由风格类型

设计并搭建Python容器化项目的CI/CD流水线_第12张图片
源码管理选Git,代码地址选Gogs中的项目地址

设计并搭建Python容器化项目的CI/CD流水线_第13张图片
构建可以选执行shell命令,Java项目可以使用DockerMaven插件,更加方便,Python项目就自己写脚本吧,自己写个脚本放到项目根目录下,然后在Jenkins构建命令中写两条命令,一条修改脚本执行权限,另一条执行脚本。

设计并搭建Python容器化项目的CI/CD流水线_第14张图片
这是一个我写的脚本,可以自动的把我的项目构建成镜像然后部署到kubernetes集群上,可以参考一下:

#!/usr/bin/env bash
#设置rabbitmq和docker私有仓库的地址
export RABBITMQ_ADRESS=10.108.226.172
export DOCKER_REGISTRY_ADRESS=10.108.226.172:5000
export VERSION=v1.0

#删除kubernetes中原有项目部署
#kubectl delete -f cetc54-server-config.yaml
#kubectl delete -f input_utils.yaml

#删除之前的镜像
docker rmi ${DOCKER_REGISTRY_ADRESS}/cetc54/input_utils

#构建镜像input_utils并上传到本地镜像仓库
tar -zcvf input_utils.tar.gz input_utils
mv input_utils.tar.gz ./input_utils
cd input_utils
docker build -t='input_utils' --build-arg rabbitmq_address=${RABBITMQ_ADRESS} .
docker tag input_utils ${DOCKER_REGISTRY_ADRESS}/cetc54/input_utils:${VERSION}
docker push ${DOCKER_REGISTRY_ADRESS}/cetc54/input_utils:${VERSION}
#docker run -di --name=input_utils input_utils
cd ..

#删除本地镜像
docker rmi input_utils

#部署到kubernetes集群
#kubectl create -f cetc54-server-config.yaml
#kubectl create -f input_utils.yaml

Jenkins配置完成后保存,点右边按钮执行构建。如果构建成功,流水线前面的圆圈会是蓝色,失败就是红色,圆圈右边一点有个天气图标,这是衡量这个项目的健康状况的,如果这个项目构建的几次种有很多次都构建失败了,那么这个天气图标就会是不好的天气,如多云,暴雨。如果构建很多次一次失败都没有,那就是晴天

设计并搭建Python容器化项目的CI/CD流水线_第15张图片
左侧菜单栏,控制台输出可以查看构建日志

设计并搭建Python容器化项目的CI/CD流水线_第16张图片
文本设计的这个流水线是最基础最简单的一种流水线,只用了Jenkins最基础的功能。而Jenkins是十分强大的,通过其他的配置它还能实现更复杂的功能,这里就不多介绍了

你可能感兴趣的:(设计并搭建Python容器化项目的CI/CD流水线)