什么是CI/CD
CI/CD 是持续集成和持续交付/部署的缩写
CI
持续集成(CI):指自动且频繁地将代码更改集成到共享源代码存储库中的做法,这是一种面向开发人员的自动化流程, 有助于更频繁地将代码更改合并回共享分支或“主干”。进行这些更新时,会触发测试步骤的自动执行,以确保合并代码更改的可靠性。
CD
CD指的是持续交付(Continuous Delivery)或持续部署(Continuous Deployment)。持续交付通常是指开发人员对应用的更改会自动进行错误测试并上传到存储库(如 GitHub 或容器注册表),然后由运维团队将其部署到实时生产环境中。 持续部署指的是自动将开发人员的更改从存储库发布到生产环境,它以持续交付为基础,实现了管道后续阶段的自动化。 CI/CD 既可能仅指持续集成和持续交付构成的关联环节,也可以指持续集成、持续交付和持续部署这三项构成的关联环节。
安装Gitea
编辑 docker-compose.yml
文件, 运行 gitea
yaml
networks:
gitea:
external: false
services:
server:
image: gitea/gitea:latest
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
restart: always
networks:
- gitea
volumes:
- ./data:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "8222:22"
执行 docker compose up -d
-- 后台启动, docker compose ps
-- 查看是否正常启动 docker compose logs
-- 查看运行日志, docker compose down
-- 关闭卸载
安装Drone
Drone需要一个drone-server和drone-runner
编辑 docker-compose.yml
文件, 运行 drone
yaml
services:
drone-server:
restart: always
image: drone/drone:latest
container_name: drone-server
ports:
- "9999:80"
volumes:
- ./:/var/lib/drone/
- ./data:/data/
environment:
- DRONE_GITEA_SERVER=http://172.22.156.47:3000 # Gitea访问地址
- DRONE_GITEA_CLIENT_ID=bb82726d-2139-4d83-8649-0082d23b297d # 应用ID,gitea中获取
- DRONE_GITEA_CLIENT_SECRET=gto_b5zbjb5sbqdyq5fxwyy2d7dce5razpaeymyvsfafoe5kktzfkxva # 应用密钥,gitea中获取
- DRONE_SERVER_HOST=http://172.22.156.47:9999
- DRONE_SERVER_PROTO=http # 支持http, https
- DRONE_RPC_SECRET=588ae4fe7e73a7b72431a6a309082a38 # 通信密钥,gitea中获取
- DRONE_GIT_ALWAYS_AUTH=true
- DRONE_GIT_USERNAME=how2j # git用户名
- DRONE_GIT_PASSWORD=how2j.online # git密码
- DRONE_USER_CREATE=username:how2j,admin:true # 管理员用户名(how2j 根据gitea设置),开启管理员账户
drone-runner-docker:
restart: always
container_name: drone-runner
image: drone/drone-runner-docker:latest
ports:
- "10000:3000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- DRONE_RPC_PROTO=http # 支持http, https
- DRONE_RPC_HOST=drone-server
- DRONE_RPC_SECRET=588ae4fe7e73a7b72431a6a309082a38 # 通信密钥,同上
- DRONE_RUNNER_NAME=drone-runner-docker
- DRONE_RUNNER_CAPACITY=2
DRONE_GITEA_CLIENT_ID、DRONE_GITEA_CLIENT_SECRET
打开本地 gitea, 点击 头像 -- 设置 -- 应用,添加 OAuth2应用程序

其中 重定向 URI。每行一个 URI。
这里填写Drone Sever的地址,比如这里填写 http://172.22.156.47:9999
DRONE_RPC_SECRET
使用OpenSSL生成
shell
openssl rand -hex 16
界面配置
输入配置DRONE_SERVER_HOST的地址,进入 Drone, 进行配置

添加 .drone.yml
文件
详细配置:文档
yaml
kind: pipeline # 定义一个管道
type: docker # 当前管道的类型
name: test # 当前管道的名称
volumes: # 声明数据卷(此为服务器中的实际目录)
- name: node_modules # 数据卷名称
host: # Host Volume
path: /volumes/drone/volumes/blog/node_modules # 宿主机目录 #绝对路径
- name: deploy_path
host:
path: /workspace/blog
clone:
disable: false # 启用代码拉取
steps: # 定义管道的执行步骤
- name: deploy # 步骤名称
image: node:16.13.2 # 当前步骤使用的镜像
depends_on: [clone] # 依赖的步骤
volumes: # 挂载数据卷(此为容器内的目录)
- name: node_modules # 数据卷名称
path: /drone/src/node_modules # 容器内目录 绝对路径
- name: deploy_path
path: /drone/src/html
commands: # 当前步骤执行的命令
- pwd # 查看当前目录
- npm config set registry https://registry.npm.taobao.org # 切换淘宝镜像
- npm install # 安装node_modules包
- npm run build # 执行编译
# - rm -fr ./blog
- ls /drone/src
- cp -r ./public/* ./html
- name: dingtalk-push
image: lddsb/drone-dingtalk-message
depends_on: [deploy]
settings:
token: xxxxxxxxxxxxxxxxxxxxxxxxxxx
type: markdown
message_pic: true
sha_link: true
when:
event: [push]
status: [success, failure]