什么是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登陆
需准备的变量
- 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_USERNAME
与 DRONE_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仓库列表。
进入想要构建的仓库页选择激活并设置信任项目。
同时亦可以项目中配置密钥、定时任务、组织密钥等。
使用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 CLI
在Web UI
界面点击左下角头像,即可看到对应的 Personal Token
及 Drone CLI Example
export DRONE_SERVER=http://drone.example.com:[端口]
export DRONE_TOKEN=[Token]
drone secret add --name [密钥名] --data @/path/to/secret [仓库名]