【CI/CD】容器化drone+gogs轻量级cicd
drone实现cicd笔记
·
基于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的思路
- 新建一个用于存放git仓库的目录/srv/git
- clone你的项目/srv/git/projectA
- map 服务器的.ssh目录用于鉴权,当然也可以用drone的secret
- 在drone yml中禁用clone
- 增加一个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:获取指定流水线的日志
:::
更多推荐
所有评论(0)