Drone CI 是一款开源持续集成工具,相较 Jenkins 提供了简易的部署方法和轻量级的功能,结合 Git 服务器可以在性能较低的单机环境下部署私有 DevOps 环境,支持公有云自动缩放(Amazon EC2,Google Cloud,Digital Ocean 等),对于小型团队或个人来说是一种不错的选择。
Drone CI 的官方文档中指出,基于网络复杂性的考虑,在单机运行 Drone CI 与 Gitea 是不受支持的,而实际上 Gitea、Drone CI、Drone Runner 是可以部署在同一台机器上。
本文以 Docker 的方式部署 Drone:
需要你提前配置好坏境或对此有所了解,本文不包含以下步骤:
最终你将得到:
首先,需要一个已经安装好的并配备 HTTPS 反向代理的 Gitea 服务器。
此后你将得到:
还需要一个用于 Drone CI 与 Drone Runner 的通信密钥 DRONE_RPC_SECRET,通过 OpenSSL 生成 16 位长的随机文本:
openssl rand -hex 16
当然,你也可以随意设置这个密钥。
得到这些基本信息后,就可以开始部署 Drone CI 的 Docker 镜像,需要注意的是 Drone_GITEA_CLIENT_SERET 一般情况下是以等号(=)结尾的,在 Shell 环境下部署需要在其前面加上用以转义的反斜杠(\),并使用 DRONE_TLS_AUTOCERT 禁用容器内的自动 Lets Encrypt 证书申请。
docker run \
--volume=/var/lib/drone:/data \
--env=DRONE_AGENTS_ENABLED=true \
--env=DRONE_TLS_AUTOCERT=false \
--env=DRONE_GITEA_SERVER=https://git.example.com \
--env=DRONE_GITEA_CLIENT_ID=d1dcee0d-a6dc-42e0-bd14-6c8e2182491b \
--env=DRONE_GITEA_CLIENT_SECRET=Uq_bCRulazf48BGdkk7Xectm7GbI0g64SMqc9m1gYV0\= \
--env=DRONE_RPC_SECRET=9c2a555969e7866edb8e4f237c30eae6 \
--env=DRONE_SERVER_HOST=drone.example.com \
--env=DRONE_SERVER_PROTO=https \
--publish=3001:80 \
--restart=always \
--detach=true \
--name=drone \
drone/drone:latest
在这里将容器提供 HTTP 服务的 80 端口映射到主机的 3001 端口,或者将 3001 替换为其他自定义端口,随后可以通过配置 HTTPS 反向代理服务器来公开这个地址。
Drone Docker Runner 的部署极为简单,允许部署在多台机器上,调整两个参数即可。
默认情况下,单个 Drone Runner 的 Piplines 并发数是 2,你可以根据服务器的配置情况调整 DRONE_RUNNER_CAPACITY 参数。
docker run -d \
-v /var/run/docker.sock:/var/run/docker.sock \
-e DRONE_RPC_PROTO=https \
-e DRONE_RPC_HOST=drone.example.com \
-e DRONE_RPC_SECRET=9c2a555969e7866edb8e4f237c30eae6 \
-e DRONE_RUNNER_CAPACITY=2 \
-e DRONE_RUNNER_NAME=${HOSTNAME} \
-p 3000:3000 \
--restart always \
--name runner \
drone/drone-runner-docker:latest
登录 Drone 的控制界面后会跳转到 Gitea 申请授权,在 Drone 的界面中启用项目。
首先构思一个希望达成的自动化功能:
Dockerfile:
FROM pypy:latest
WORKDIR /app
COPY Pipfile .
COPY Pipfile.lock .
RUN pip install pipenv
RUN pipenv install --skip-lock
COPY . .
CMD ["pipenv", "run", "python", "app.py"]
Drone 的 plugins/docker 插件提供了 Docker 构建功能,构建出的镜像上传到 Docker Hub 或私有 Docker Registry,例如阿里云提供免费的 Docker Registry 托管。
Drone 的项目默认配置文件名是 .drone.yml。
.drone.yml:
kind: pipeline
name: default
steps:
- name: docker
image: plugins/docker
settings:
repo: registry.cn-beijing.aliyuncs.com/example/example
registry: registry.cn-beijing.aliyuncs.com
username:
from_secret: docker_username
password:
from_secret: docker_password
使用 Drone Secrets 功能,可以避免在日志中输出密码,在 Drone 的仓库界面中添加 docker_username 与 docker_password。
向项目提交代码后即可查看自动化构建日志。
赞啊,牛逼
为啥打游戏一年被删了
doker 的存储路径我修改为/data 下了,但是plugins/docker默认 去找 /var/lib/docker,这个有什么办法嘛
文档里似乎没有提到这种修改的解决办法,可能不支持。