基于docker

卷挂载模式

version: '3'
services:
  drone-server:
    restart: always
    image: drone/drone:2.21.0
    cpus: 0.5
    mem_limit: 100m
    ports:
      - 30080:80
      - 30443:443
    volumes:
      - drone_data:/data
    environment:
      - DRONE_USER_CREATE=username:luobozi,admin:true
      - DRONE_AGENTS_ENABLED=true
      - DRONE_OPEN=true
      - DRONE_SERVER_HOST=drone-server
      - DRONE_SERVER_PROTO=http
      - DRONE_GOGS_SERVER=http://gogs:3000
      - DRONE_GIT_ALWAYS_AUTH=false
      - DRONE_RPC_SECRET=abc123456
    networks:
      gogs_bridge:
        ipv4_address: 172.22.0.2

  drone-agent:
    restart: always
    image: drone/agent:1.6.2
    cpus: 0.5
    mem_limit: 100m
    depends_on:
      - drone-server
    environment:
      - DRONE_RPC_SERVER=http://drone-server
      - DRONE_RPC_PROTO=http
      - DRONE_RPC_SECRET=abc123456
      - DRONE_MAX_PROCS=5
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      gogs_bridge:
        ipv4_address: 172.22.0.3

  drone-runner:
    restart: always
    image: drone/drone-runner-docker:1.6.3
    cpus: 0.5
    mem_limit: 100m
    depends_on:
      - drone-server
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:rw
    environment:
      - DRONE_RPC_HOST=drone-server
      - DRONE_RPC_SECRET=abc123456
      - DRONE_RPC_PROTO=http
      - DRONE_RUNNER_CAPACITY=4
      - DRONE_RUNNER_NAME=runner
      - DRONE_RUNNER_LABELS=machine1:runner1
      - DRONE_DEBUG=true
      - DRONE_LOGS_DEBUG=true
      - DRONE_LOGS_PRETTY=true
      - DRONE_LOGS_NOCOLOR=false
    networks:
      gogs_bridge:
        ipv4_address: 172.22.0.4

  gogs:
    restart: always
    image: gogs/gogs:0.13
    cpus: 0.5
    mem_limit: 300m
    ports:
      - "30022:22"
      - "3000:3000"
    volumes:
      - gogs_data:/data
    depends_on:
      - mysql
    environment:
      - SKIP_VERIFY=true
    networks:
      gogs_bridge:
        ipv4_address: 172.22.0.5

  mysql:
    restart: always
    image: mysql:5.7
    cpus: 0.5
    mem_limit: 500m
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - gogs_db_data:/var/lib/mysql
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: gogs
      MYSQL_USER: gogs
      MYSQL_PASSWORD: gogs
      TZ: Asia/Shanghai
    networks:
      gogs_bridge:
        ipv4_address: 172.22.0.6

  registry:
    restart: always
    image: registry:2
    cpus: 0.5
    mem_limit: 300m
    volumes:
      - registry_data:/var/lib/registry
    ports:
      - 5000:5000
    networks:
      gogs_bridge:
        ipv4_address: 172.22.0.7

  registry-web:
    cpus: 1
    mem_limit: 1024m
    image: hyper/docker-registry-web
    ports:
      - 5001:8080
    environment:
      - REGISTRY_URL=http://registry:5000/v2
      - REGISTRY_NAME=192.168.1.20:5000
    restart: always
    networks:
      gogs_bridge:
        ipv4_address: 172.22.0.8



volumes:
  drone_data: {}
  gogs_db_data: {}
  gogs_data: {}
  registry_data: {}

networks:
  gogs_bridge:
    driver: bridge
    ipam:
      config:
        - subnet: 172.22.0.0/16

绑定挂载模式

version: '3'
services:
  drone-server:
    image: drone/drone:2.21.0
    cpus: 0.5
    mem_limit: 100m
    ports:
      - 30080:80
      - 30443:443
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./drone_data:/data
    environment:
      - DRONE_USER_CREATE=username:luobozi,admin:true
      - DRONE_AGENTS_ENABLED=true
      - DRONE_OPEN=true
      - DRONE_SERVER_HOST=drone-server
      - DRONE_SERVER_PROTO=http
      - DRONE_GOGS_SERVER=http://gogs:3000
      - DRONE_GIT_ALWAYS_AUTH=false
      - DRONE_RPC_SECRET=abc123456
    networks:
      gogs_bridge:
        ipv4_address: 172.22.0.2

  drone-agent:
    image: drone/agent:1.6.2
    cpus: 0.5
    mem_limit: 100m
    depends_on:
      - drone-server
    environment:
      - DRONE_RPC_SERVER=http://drone-server
      - DRONE_RPC_PROTO=http
      - DRONE_RPC_SECRET=abc123456
      - DRONE_MAX_PROCS=5
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      gogs_bridge:
        ipv4_address: 172.22.0.3

  drone-runner:
    image: drone/drone-runner-docker:1.6.3
    cpus: 0.5
    mem_limit: 100m
    depends_on:
      - drone-server
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock:rw
    environment:
      - DRONE_RPC_HOST=drone-server
      - DRONE_RPC_SECRET=abc123456
      - DRONE_RPC_PROTO=http
      - DRONE_RUNNER_CAPACITY=4
      - DRONE_RUNNER_NAME=runner
      - DRONE_RUNNER_LABELS=machine1:runner1
      - DRONE_DEBUG=true
      - DRONE_LOGS_DEBUG=true
      - DRONE_LOGS_PRETTY=true
      - DRONE_LOGS_NOCOLOR=false
    networks:
      gogs_bridge:
        ipv4_address: 172.22.0.4

  gogs:
    image: gogs/gogs:0.13
    cpus: 0.5
    mem_limit: 300m
    ports:
      - "30022:22"
      - "3000:3000"
    volumes:
      - ./data_gogs:/data
    depends_on:
      - mysql
    environment:
      - SKIP_VERIFY=true
    networks:
      gogs_bridge:
        ipv4_address: 172.22.0.5

  mysql:
    image: mysql:5.7
    cpus: 0.5
    mem_limit: 500m
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /etc/localtime:/etc/localtime:ro
      - ./mysql_data:/var/lib/mysql
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: gogs
      MYSQL_USER: gogs
      MYSQL_PASSWORD: gogs
      TZ: Asia/Shanghai
    networks:
      gogs_bridge:
        ipv4_address: 172.22.0.6

  # registry:
  #   image: registry
  #   volumes:
  #     - ./registry_data:/var/lib/registry
  #   ports:
  #     - 5000:5000



networks:
  gogs_bridge:
    driver: bridge
    ipam:
      config:
        - subnet: 172.22.0.0/16

.drone.yml流水线文件

拉个golang容器测试

kind: pipeline
type: docker
name: default

steps:
- name: backend
  image: golang
  commands:
  - go version
  - ls  -hla /drone/src/
  - sleep

需要挂载volume需要勾选Trusted

#docker测试流水线
kind: pipeline
type: docker
name: docker-ps

steps:
- name: docker-ps
  image: docker:20.10.9-dind
  commands:
    - docker ps
  volumes:
    - name: dockersock
      path: /var/run/docker.sock

volumes:
  - name: dockersock
    host:
      path: /var/run/docker.sock

指定runner运行流水线

node:
  machine1: runner1
#- DRONE_RUNNER_LABELS=machine1:runner1

禁用默认的clone

clone:
  disable: true

手动clone的思路

  1. 新建一个用于存放git仓库的目录/srv/git
  2. clone你的项目/srv/git/projectA
  3. map 服务器的.ssh目录用于鉴权,当然也可以用drone的secret
  4. 在drone yml中禁用clone
  5. 增加一个pull step用于同步更新,取代系统默认的clone,并拷贝到drone工作目录

.drone.yml示例

kind: pipeline
type: docker
name: default

clone:
  disable: true

steps:
  - name: pull
    image: alpine/git
    volumes:
      - name: ssh
        path: "/root/.ssh"
      - name: git_repo
        path: "/srv/git_repo"
    commands:
      - cd /srv/git_repo/projectA
      - git pull origin main
      - cd -
      - "cp -R /srv/git_repo/carry-dockers/* ./"
volumes:
  - name: ssh
    host:
      path: /root/.ssh
  - name: git_repo
    host:
      path: /srv/git_repo

如果推送gogs仓库失败git禁用ssl验证

git config --global http.sslVerify false

常用的Drone API路径:

带上token就可以访问drone的api获取一些相关信息

  • /api/user:获取当前用户信息
  • /api/repos:获取用户拥有的仓库列表
  • /api/repos/{namespace}/{name}:获取指定仓库的信息
  • /api/repos/{namespace}/{name}/builds:获取指定仓库的构建列表
  • /api/repos/{namespace}/{name}/builds/{number}:获取指定仓库中某个构建的详细信息
  • /api/repos/{namespace}/{name}/builds/{number}/logs:获取指定构建的日志
  • /api/repos/{namespace}/{name}/builds/{number}/artifacts:获取指定构建的构件列表
  • /api/pipeline/{namespace}/{name}/{number}:获取指定流水线的详细信息
  • /api/pipeline/{namespace}/{name}/{number}/steps:获取指定流水线中所有步骤的信息
  • /api/pipeline/{namespace}/{name}/{number}/logs:获取指定流水线的日志

:::

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐