前言
经过一段时间的使用, drone 的 ci 工作流语法和变量使用基本掌握,也能够替代现在我所使用的 GitHub Action Workflow 的工作流.折腾的过程中也遇到过坑,国内基本上搜索不到有用的文章,只能从国外查找,官方文档有时也写的很简单,博主整理一下常用的信息分享给大家.
top level
配置文件中几个重要的 top level
例如: platform
,node
,clone
,trigger
,image_pull_secrets
等等.
platform
默认情况下不定义platform
,则会使用默认的runner
来执行工作流,如果按照以下示例定义了arm64
,将会调用 ARM 的runner
来执行,前提是必须在 ARM 的服务器上部署drone-ruuner
服务.
kind: pipeline
type: docker
name: deploy
platform:
os: linux
arch: arm64
steps:
...
node
可以部署多个node
在不同的区域的服务器上,这些节点的drone-ruuner
需要加上DRONE_RUNNER_LABELS=server:hk
变量.
以下示例将会指定server: hk
的这个节点来执行.
kind: pipeline
type: docker
name: deploy
steps:
...
node:
server: hk
clone
默认情况下每次触发工作流,都会自动clone
当前仓库,如果工作流不需要使用本地仓库可以跳过clone
步骤.
kind: pipeline
type: docker
name: deploy
clone:
disable: true
step:
- name: build
image: alpine
commands:
- git clone https://github.com/stilleshan/frpc
- cd frpc && ...
trigger
出发工作流的条件,示例:
kind: pipeline
type: docker
name: deploy
steps:
...
trigger:
branch:
- master
event:
- pull_request
- push
image_pull_secrets
用于私有镜像仓库的 pull 使用,下文会有单独的示例讲解.
secrets
secrets 的基础
在工作流中会用到一些机密的参数或者密钥不方便公开,可以在 drone 中创建secrets
来传递到工作流中.
例如以下创建腾讯云 COS 的登陆 API 密钥,用于将工作流或者仓库里的文件上传到对象存储.
如果是通用的secrets
多个仓库都可以使用,可以直接创建组织的secrets
,这样同一个组织用户下的所有仓库都可以使用.
使用 secrets
在工作流中,一些官方的插件可以直接使用secrets
,例如使用plugins/docker
来构建镜像发布至hub.docke.com
.在settings
里时可以直接from_secret
使用secrets
.
kind: pipeline
name: default
steps:
- name: docker
image: plugins/docker
settings:
username:
from_secret: docker_username
password:
from_secret: docker_password
repo: ioiox/frpc
context: frpc
dockerfile: frpc/Dockerfile
tags:
- latest
如果想直接来使用secrets
里的值来执行命令,得必须将secrets
转为environment
变量.
以下示例是添加了environment
,将secrets
的COS_SECRET_ID
等参数转为变量COS_SECRET_ID
,在命令里就可以直接$COS_SECRET_ID
.
- name: cos
image: stilleshan/coscmd
environment:
COS_SECRET_ID:
from_secret: COS_SECRET_ID
COS_SECRET_KEY:
from_secret: COS_SECRET_KEY
COS_BUCKET:
from_secret: COS_BUCKET
COS_REGION:
from_secret: COS_REGION
commands:
- coscmd config -a $COS_SECRET_ID -s $COS_SECRET_KEY -b $COS_BUCKET -r $COS_REGION
- coscmd upload -rfs --delete public/ /
私有镜像仓库的使用
push
如果需要构建镜像到私有仓库,依旧可以使用plugins/docker
插件,则需要添加部分参数.
添加registry
为私有仓库地址,注意repo
也需要添加私有仓库地址.
kind: pipeline
name: default
steps:
- name: docker
image: plugins/docker
settings:
registry: docker.ioiox.com
username:
from_secret: docker_username_private
password:
from_secret: docker_password_private
repo: docker.ioiox.com/stille/alpine
tags:
- dev
when:
branch:
- main
如果需要构建镜像的目录不是根目录,可以添加以下参数来指定文件路径和Dockerfile
路径.
step:
....
repo: docker.ioiox.com/stille/alpine
context: alpine
dockerfile: alpine/Dockerfile
tags:
- dev
pull
如果需要使用私有仓库的镜像,需要配置image_pull_secrets
参数来获取权限.
kind: pipeline
name: default
steps:
- name: build
image: docker.ioiox.com/stille/alpine
commands:
- ...
image_pull_secrets:
- dockerconfig
需要先 Linux 里登陆私有仓库,获取config.json
内容,在secrets
中创建dockerconfig
填入以下配置内容.
docker login docker.ioiox.com
# 输入账号密码登陆
cat ~/.docker/config.json
# 获取以下内容
{
"auths": {
"docker.ioiox.com": {
"auth": "xxxxxxxxxxxxxxxxxx"
}
}
}
docker buildx 多架构镜像构建
如果需要同时构建amd64
和arm64
或者更多架构的镜像,参考示例:
kind: pipeline
type: docker
name: deploy
steps:
- name: latest
image: thegeeklab/drone-docker-buildx
privileged: true
settings:
registry: docker.ioiox.com
repo: docker.ioiox.com/stille/alpine
purge: true
compress: true
platforms: linux/amd64,linux/arm64
username:
from_secret: docker_username_private
password:
from_secret: docker_password_private
context: alpine
dockerfile: alpine/Dockerfile
tags: latest
when:
branch:
- main
- alpine/*
scp
可以使用appleboy/drone-scp
插件来将构建的文件通过scp
发送至服务器.
kind: pipeline
type: docker
name: deploy
- name: deploy
image: appleboy/drone-scp
settings:
host: 103.23.23.23
user: root
password: xxxx
port: 33333
source: public/*
strip_components: 1
target: /home/wwwroot/blog
when:
branch:
- master
搭配secrets
传递password
.
user: root
password:
from_secret: ssh-password
port: 33333
也可以使用ssh-key
来登陆服务器,至需要将私钥 id_rsa
内容创建ssh-key
的secrets
即可.
user: root
key:
from_secret: ssh-key
port: 33333
push 本仓库
工作流修改了仓库文件需要commit
和push
,可以参考以下示例使用:
- name: push commit
image: appleboy/drone-git-push:0.2.0-linux-amd64
settings:
branch: main
remote: git@github.com:stille/frpc.git
ssh_key:
from_secret: git_key
force: false
commit: true
commit_message: push by drone
结语
以上就是一些常用的 drone 配置文件使用语法,更多插件或语法可以参考 官方文档
2 条评论
学习了
你好,看到你mjj论坛收春川,但是我没账号,只能这么联系你了,能提供一个联系方式吗,可以先鸡