超能郭工
前端坤坤的小破站,IKUN永不过时 🐔

使用 Drone CI 部署 CICD持续化构建流程

2 年前
兴趣折腾

做为一个开发,空闲时间经常学习些小项目,代码一推上去就完成了从代码的构建➡️推送镜像➡️部署,简直不要太赛博。

折腾过Jenkins,一直觉着太占内存了,配置复杂度也高,不适合放在我的小 NAS 中,经后端朋友的推荐了Drone CI,功能该有的有,配置简单,且只需要把配置文件放在项目下,并在 Drone CI 中简易配置后就可以执行构建了。

🐋 部署Drone CI

跟着 官方文档 配置结合自己的需求写 docker-compose 部署

yaml
复制成功
services:
  drone:
    image: drone/drone:2.24
    container_name: drone
    restart: always
    ports:
      - 2423:80
    volumes:
      - [drone volumn path]:/data/
    environment:
      - DRONE_SERVER_PROTO=[DRONE_SERVER_PROTO]
      - DRONE_RPC_SECRET=[DRONE_RPC_SECRET]
      - DRONE_SERVER_HOST=[DRONE_SERVER_HOST]
      - DRONE_GITLAB_CLIENT_ID=[Client ID]
      - DRONE_GITLAB_CLIENT_SECRET=[Client Secret]
      - DRONE_GIT_ALWAYS_AUTH=true
      - DRONE_GIT_USERNAME=[git username]
      - DRONE_GIT_PASSWORD=[git password]
      - DRONE_USER_CREATE=username:kwokronny,admin:true,token:rRj5XdqXDGRua9HTV6BS
    networks: 
      gateway:

      
  drone-runner:
    image: drone/drone-runner-docker:1.8.3
    container_name: drone-runner
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock 
      - [drone volumn path]/runner-env.conf:/etc/runner-env.conf
    environment:
      - DRONE_RPC_PROTO=[DRONE_SERVER_PROTO]
      - DRONE_RPC_HOST=[DRONE_SERVER_HOST]
      - DRONE_RPC_SECRET=[DRONE_RPC_SECRET]
      - DRONE_RUNNER_CAPACITY=10
      - DRONE_RUNNER_NAME=drone-runner
      - DRONE_RUNNER_NETWORKS=gateway
      - DRONE_RUNNER_ENV_FILE=/etc/runner-env.conf
    networks: 
      gateway:
      
networks:
  gateway:
    external: true

需准备的变量

  • git平台生成对应的client ID与Secret
  • 通过密码生成工具生成一个 用于连接Drone Server与Runner的连接的共享密钥。
  • 准备使用的Web域名或IP及是否使用SSL,可以是内网IP亦或是准备的域名

激活对应仓库的自动化

部署成功后访问对应入口后就可以通过 点击 Continue 平台通过当时在Git平台申请的应用使用 OAuth 的方式登陆了。

点击右上角的 SYNC 将网址同步你的GIT仓库列表。

Image

Image

进入想要构建的仓库,点击激活后,就可以在页面中配置相关的设置与密钥等。

Image

奇葩点: ssh key文件密钥需要 Drone CLI 的方式上传

Web UI界面点击左下角头像,即可看到对应的 Personal TokenDrone CLI Example

Image

添加文件密钥文档

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

Drone Plugin 是其最重要的一个生态

Drone 插件列表 一般 Docker 常用的drone 插件

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

使用Pipeline

项目已写好 Dockerfile,再根据需求在项目根目录写好 .drone.yml 即可完成该项目的持续化部署的流程建设啦

yaml
复制成功
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/命名空间/部署项目/builds?branch=master&service=blog
      headers:
        - "Authorization=XXX"

标签:
Docker
使用 Drone CI 部署 CICD持续化构建流程
本站除注明转载外均为原创文章,采用 CC BY-NC-ND 4.0 协议。转载请注明出处,不得用于商业用途
评论