什么是CICD

问问阿Chat:什么是CICD

一个典型的持续化构建流程包括下面几个主要步骤:

  • 开发者提交代码到源代码仓库,例如 Git 仓库。
  • 触发器检测到仓库有新的提交,启动一个构建流水线。
  • 构建流水线拉取最新的代码,并执行一系列步骤:
    • 测试代码(如单元测试、集成测试)
    • 编译程序代码
    • 构建程序包
    • 运行测试用例并生成测试报告
    • 部署到测试环境
  • 如果配置了,部署到演示环境
  • 流程完成后,如果测试成功和构建通过,会部署到预发布环境或者生产环境。

整个流程监控持续运行,任何步骤的失败都会触发构建失败,并通知相关人员。 开发者查看反馈,修改代码并重新提交,循环执行整个流程。

我的环境

我是win 10上装 VM虚拟机(centOS7 固态分配容量40G 3G内存),已装docker与gitlab

综上环境我的需求是需要一个轻量的自动化构建工具,从朋友了解到Drone CI这个工具

问问阿Chat:什么是Drone CI

Drone CI是一个开源的持续集成(CI)和连续交付(CD)平台。它有以下主要特点:

  • 使用YAML配置文件定义构建和部署流水线
  • 支持GitHub仓库和BitBucket仓库作为代码来源
  • 构建和运行Docker容器,适用于Docker化项目
  • 基于Web的UI界面,方便管理和查看项目状态
  • 提供可扩展的插件机制,支持不同任务和服务
  • 简单的 authentication 方式,如GitHub OAuth
  • 构建日志和结果以时间序列的方式展现,方便观察
  • 支持在多个物理或虚拟机器之间扩展

安装

跟着官方文档

Drone Server

通过git仓库的OAuth登陆

github-application-create.png

需准备的变量

  • git平台生成对应的client ID与Secret
  • 通过密码生成工具生成一个 用于连接Drone Server与Runner的连接的共享密钥。
  • 准备使用的Web域名或IP及是否使用SSL,可以是内网IP亦或是准备的域名
docker pull drone/drone:latest
docker run \
  --volume=/var/lib/drone:/data \
  --env=DRONE_GITHUB_CLIENT_ID=[Git OAuth Client ID] \
  --env=DRONE_GITHUB_CLIENT_SECRET=[Git OAuth Sercet] \
  --env=DRONE_RPC_SECRET=[共享密钥] \
  --env=DRONE_SERVER_HOST=drone.example.com:[端口] \
  --publish=[端口]:80 \
  --restart=always \
  --detach=true \
  --name=drone \
  drone/drone:latest

Docker Runner

Drone执行器不断向服务器轮询工作负载用以执行。有不同类型的执行器用于不同的使用场景和运行环境。您可以安装一个或多个执行器,一个或多个类型。

文档中没有写增加 DRONE_GIT_USERNAMEDRONE_GIT_PASSWORD 变量,这两个变量是用于拉取git仓库代码的,也非常重要

docker pull drone/drone-runner-docker:1
docker run --detach \
  --volume=/var/run/docker.sock:/var/run/docker.sock \
  --env=DRONE_GIT_USERNAME=[git用户名]
  --env=DRONE_GIT_PASSWORD=[git密码]
  --env=DRONE_RPC_PROTO=http \
  --env=DRONE_RPC_HOST=drone.example.com:[端口] \
  --env=DRONE_RPC_SECRET=[共享密钥] \
  --env=DRONE_RUNNER_CAPACITY=2 \
  --env=DRONE_RUNNER_NAME=[Runner名称] \
  --restart=always \
  --name=drone-runner \
  drone/drone-runner-docker:1

验证

$ docker logs drone-runner

INFO[0000] starting the server
INFO[0000] successfully pinged the remote server 

激活项目仓库

通过上面配置的域名与端口进入到Web UI后登录,若未看到你新建的GIT项目在WebUI的仓库列表时 可通过点击右上角的 SYNC 将网址同步最近的GIT仓库列表。

drone-sync-repo.png

进入想要构建的仓库页选择激活并设置信任项目。

drone-activate-repo.png

同时亦可以项目中配置密钥、定时任务、组织密钥等。

使用Pipeline

在项目根目录新建 .drone.yml 登录 Drone 的 Web UI, 以nodejs项目为例

kind: pipeline
type: docker #runner 类型
name: drone

trigger: # 触发机制:具体文档可查 https://docs.drone.io/pipeline/triggers/
  branch: # 监测master分支的推送
    - master

steps: #步骤
  - name: build 构建镜像并推送到指定源
    image: plugins/docker #应用 plugins/docker 插件 https://plugins.drone.io/plugins/docker
    environment: # 可为镜像配置环境变量,如依赖加速等
      http_proxy: http代理
      https_proxy: http代理
    settings:
      registry: registry.cn-hangzhou.aliyuncs.com #推送至指定源
      username: # 应用存储的密钥
        from_secret: ALIYUN_DOCKER_USR
      password: # 应用存储的密钥
        from_secret: ALIYUN_DOCKER_PWD
      auto_tag: true
      # 指定镜像名
      repo: registry.cn-hangzhou.aliyuncs.com/[命名空间]/[镜像名称]
      tags: 
        - ${DRONE_BUILD_NUMBER}
        - latest

  # 完成后执行我的部署流程,因我的部署流程由drone的另一个项目管理,所以直接调用Drone的webhook调用即可
  # drone API文档: https://docs.drone.io/api/overview/
  - name: webhook 
    image: plugins/webhook
    when:
      status:
        - success
    settings:
      urls: http://[drone-webhook]/api/repos/命名空间/docker-compose/builds?branch=master&service=blog
      headers:
        - "Authorization=XXX"

Drone Plugin

Drone 插件列表 我常用的drone 插件

  • plugins/docker
  • plugins/webhook
  • appleboy/drone-scp
  • appleboy/drone-ssh

Drone CLI

Web UI 增加密钥时无法上传文件,直接将密钥内容文本方式写入,亦容易出现无法正确鉴权的情况时 可通过Drone CLI的方式上传密钥文件 安装Drone CLIWeb UI界面点击左下角头像,即可看到对应的 Personal TokenDrone CLI Example

export DRONE_SERVER=http://drone.example.com:[端口]
export DRONE_TOKEN=[Token]
drone secret add --name [密钥名] --data @/path/to/secret [仓库名]