Python基于Drone的CI-CD(代码检查、测试、构建、部署)实践

发布时间: 2020-06-13 更新时间: 2021-11-30

Python Python,CI-CD,Drone 8.50 K 7 分钟 288

Python基于Drone的CI-CD(代码检查、测试、构建、部署)实践

tips:

一、CI/CD 服务器环境配置

1. CI/CD 工具列表

  • 容器服务:安装 docker、docker-compose
  • Drone服务器: 安装配置 drone
  • 代码检查服务器:安装配置 SonarQube

2. 基于Docker的Drone和SonarQube安装配置

docker-compose.yaml配置如下:

version: "2" services: drone-server: image: drone/drone:1 container_name: drone_server restart: always volumes: - /var/run/docker.sock:/var/run/docker.sock - ./data/drone:/data environment: - DRONE_GITHUB_SERVER=https://github.com - DRONE_RUNNER_CAPACITY=2 - DRONE_TLS_AUTOCERT=true - DRONE_SERVER_PROTO=http # 此三项需要修改为你自己的Github应用申请 # 具体参考文档 https://docs.drone.io/installation/github/single-machine/ - DRONE_GITHUB_CLIENT_ID=4985615 - DRONE_GITHUB_CLIENT_SECRET=132456 - DRONE_SERVER_HOST=drone.xxxx.com ports: - "8001:80" - "8000:443" networks: - ci_net sonarqube-service: image: sonarqube:alpine container_name: sonarqube_service restart: always ports: - "8002:9000" networks: - ci_net networks: ci_net:

字段说明:

字段 说明
DRONE_GITHUB_SERVER Github版本库访问地址
DRONE_RUNNER_CAPACITY 一个整数,定义代理程序应同时执行的最大管道数。默认值为两个管道。
DRONE_SERVER_HOST 包含Drone服务器主机名或IP地址的字符串。
DRONE_SERVER_PROTO 包含Drone服务器协议方案的字符串。该值应设置为http或https
DRONE_GITHUB_CLIENT_ID Github中申请的应用连接ID
DRONE_GITHUB_CLIENT_SECRET Github中申请的应用连接密钥
DRONE_SERVER_HOST Github中申请应用填写的drone服务地址

开启Drone和SonarQube服务:

  • 执行docker-compose up -d运行drone
  • 执行docker ps -a查看是否启动
  • 如果未成功启动,执行docker logs [容器ID]查看错误并解决。

访问服务:

  • 访问服务器8001端口,打开drone的web页面,使用Github账号登陆,登陆成功drone会自动获取当前用户项目,点击项目开启对项目的监管。
  • 访问服务器8002端口,打开SonarQube的web界面,默认账户 admin 默认密码 admin

参考文档:

二、项目代码中的CI/CD配置

1. 注意事项

  • Github代码仓库中需要配置webhook,在登陆drone后,会自动拉取项目,点击进入项目后,点击settings后,进入到设置界面,然后点击save,即可完成webhook配置(drone自动配置)。
  • 自动完成了Github的webhook配置,注意检查协议,应与drone地址协议一致(http或https)。
  • from_secret值在 drone/settings/Secrets配置。

2. 编写.drone.yml文件

  • 每一个项目都需要编写.drone.yml文件,在文件中定义代码提交了之后,执行具体的操作步骤。

  • 在实际项目中会涉及到各种插件的使用,根据需要在drone插件库查询相关插件的使用方法。

  • 以Python项目为例,编写.drone.yml

    kind: pipeline name: default steps: # 代码分析 - name: code-analysis image: aosapps/drone-sonar-plugin settings: sonar_host: from_secret: sonar_host sonar_token: from_secret: sonar_token # 测试 - name: code-test image: python:3 commands: - pip install -r requirements.txt - pytest # 构建代码docker镜像 - name: code-build image: plugins/docker settings: registry: from_secret: docker_registry repo: from_secret: docker_repo username: from_secret: docker_name password: from_secret: docker_password tags: - latest - '1.0' # 将部署文件放入指定目录 - name: code-scp image: appleboy/drone-scp settings: host: from_secret: ssh_host username: from_secret: ssh_user port: 22 password: from_secret: ssh_password target: /projects/ci_test source: docker-compose.yaml # 部署项目 - name: code-deploy image: appleboy/drone-ssh settings: host: from_secret: ssh_host username: from_secret: ssh_user port: 22 password: from_secret: ssh_password script: - cd /projects/ci_test - docker-compose pull ci_test - docker-compose up -d

三、配置说明

1. 代码分析

  • 配置参考文档
  • 使用sonarQube插件进行代码质量分析,在sonarQube中项目名字默认为仓库名称
kind: pipeline name: default steps: # 代码分析 - name: code-analysis image: aosapps/drone-sonar-plugin settings: sonar_host: from_secret: sonar_host sonar_token: from_secret: sonar_token

字段说明:

字段 说明
sonar_host sonar代码分析后推送地址
sonar_token sonar用户认证密钥,如果未设置,不需要填

2. 测试

以python为例。

kind: pipeline name: default steps: # 测试 - name: code-test image: python:3 commands: - pip install -r requirements.txt - pytest

3. 构建镜像

  • 配置参考文档
  • 构建docker镜像并推送到远端镜像仓库,需要在代码仓库项目根目录编写Dockerfile文件
kind: pipeline name: default steps: # 构建代码docker镜像 - name: code-build image: plugins/docker settings: registry: from_secret: docker_registry repo: from_secret: docker_repo username: from_secret: docker_name password: from_secret: docker_password tags: - latest - '1.0'

字段说明:

字段 说明
registry 镜像推送地址
repo 推送的命名空间及镜像名字(仓库地址/命名空间/镜像名称)
username 仓库账号
password 仓库账号密码
tags 设置镜像标签或版本

4. 放置部署文件

  • 配置参考文档
  • 将代码仓库中的docker-compose.yaml文件放置到指定服务器的指定位置。
kind: pipeline name: default # 将部署文件放入指定目录 - name: code-scp image: appleboy/drone-scp settings: host: from_secret: ssh_host username: from_secret: ssh_user port: 22 password: from_secret: ssh_password target: /projects/ci_test source: docker-compose.yaml

字段说明:

字段 说明
host 服务器地址
username 服务器用户名
password 服务器用户密码
target 指定放置的文件路径
source 选用放置的文件路径

5. 部署项目

kind: pipeline name: default # 部署项目 - name: code-deploy image: appleboy/drone-ssh settings: host: from_secret: ssh_host username: from_secret: ssh_user port: 22 password: from_secret: ssh_password script: - cd /projects/ci_test - docker-compose pull ci_test - docker-compose up -d

字段说明:

字段 说明
host 服务器地址
username 服务器用户名
password 服务器用户密码
script 服务器中的执行命令

6. 按照Git条件来执行

kind: pipeline name: default steps: # 代码分析 - name: code-analysis image: aosapps/drone-sonar-plugin settings: sonar_host: from_secret: sonar_host sonar_token: from_secret: sonar_token when: branch: - master event: - tag
end
如果你觉得还不错的话,请我吃个午饭吧!😍
支付宝
支付宝
微信
微信
目录

Copyright © 2019-2020 qzq版权所有

蜀ICP备19012274号-1 | 管理