你可以使用 命令行工具 在笔记本电脑或个人计算机上本地运行 Docker 流水线,用于开发和调试目的。这是我们对 它在我的电脑上可以正常运行 的常见抱怨的回答。
安装命令行 Runner
-
使用 Homebrew 在 macOS 上安装命令行工具:
brew install drone-cli
-
使用 Scoop 在 Windows 上安装命令行工具:
scoop isntall drone
命令行 Runner 用法
命令行 Runner 需要一个可以正常运行的 Docker 安装。Drone 使用本地 Docker 守护程序在主机上本地执行流水线。本地执行与 Drone Server
没有任何是通信。
-
导航到 .drone.yml 文件所在的 git 存储库的根目录。这是一个可用于测试目的的基本配置:
1 2 3 4 5 6 7 8 9 10
kind: pipeline type: docker name: default steps: - name: test image: alpine commands: - echo hello - echo world
-
从命令行执行你的流水线:
drone exec
-
该命令将流水线日志流式传输到你的终端进行分析。如果流水线失败,该命令将返回非零退出代码。
$ drone exec [test:1] + echo hello [test:2] hello [test:3] + echo world [test:4] world
工作区
命令行 Runner 使用 docker 卷挂载你当前的工作目录,作为流水线步骤的工作目录。将你的代码暴露给你的流水线。因此在本地运行时会跳过克隆步骤。
运行特定流水线
命令行 Runner 运行 default 流水线。如果你为流水线使用不同的名称,或者你在 yaml 中定义了多个流水线,则可以使用 --pipeline
标志执行命名流水线。
-
以下为带有名为 test 的流水线的示例配置
kind: pipeline type: docker name: test steps: - name: dist image: node commands: - npm install - npm run dist
-
以下为执行 test 流水线的示例命令
drone exec --pipeline=test
运行特定步骤
在本地运行流水线时,你可以限制执行哪些流水线步骤以及跳过哪些流水线步骤。
-
以下为仅执行流水线步骤 build 和 test 的示例命令
drone exec --include=build --include=test
-
以下为执行除 deploy 之外所有流水线步骤的示例命令
drone exec --exclude=deploy
模拟 Secrets
命令行 Runner 没有读取存储在服务器中的机密的权限。你可以通过文本文件将机密传递给命令行 Runner,从而为本地流水线提供 Secrets
信息。
-
以下为需要用户名和密码环境变量的示例流水线配置,来自 Secrets。
kind: pipeline type: docker name: default steps: - name: test environment: USERNAME: from_secret: USERNAME PASSWORD: from_secret: PASSWORD
-
创建一个简单的文本文件,其中每行以键值格式定义一个 Secrets。出于本演示的目的,我们将文件命名为
secrets.txt
。USERNAME=root PASSWORD=password
-
执行流水线时通过命令行标志(Flags)提供你的 Secrets 文件。
drone exec --secret-file=secrets.txt
命令行 Runner 使用 dotenv 包来读取和解析 Secrets 文件。如果你在使用 Secrets 文件时遇到问题,请查阅 dotenv 官方包文档。
模拟元数据 (Metadata)
命令行 Runner 不与 Drone 服务器通信,因此无权访问存储库、提交和构建 元数据,这会让你的流水线无法使用。
你可以通过使用命令行标志(Flags)和环境变量将存储库和构建信息传递给命令行 Runner 来模拟存储库元数据。
-
设置分支的示例命令:
drone exec --branch=master
-
设置构建事件的示例命令:
drone exec --event=pull_request
-
使用环境变量设置元数据的示例命令:
DRONE_SYSTEM_HOST=drone.company.com drone exec
受信任模式
如果你的流水线使用需要受信任模式的配置,你可以使用 --trusted
标志在本地启用受信任模式。Trusted 模式将流水线提升权限授予你的主机。请谨慎使用。
-
启用信任模式的示例命令:
drone exec --trusted
本地执行与远程执行流水线的区别
命令行 Runner 会做出合理的努力来模拟服务器环境。但是,这仍然存在可能影响执行的显着差异:
- 服务器克隆你的存储库,而命令行 Runner 挂载你当前的工作目录。工作目录中已经存在的任何文件或依赖项也会安装到你的流水线中。
- 服务器可以访问更多数据(提交详细信息、存储库详细信息等)。需要将此数据提供给命令行 Runner 以更紧密地模拟服务器环境。
- 服务器有权访问你的 OAuth 凭据并使用这些凭据生成 netrc 文件。需要将这些凭据提供给命令行 Runner,以更紧密地模拟服务器环境。
- 服务器可以访问存储库、组织和加密的 Secrets 信息。命令行 Runner 无权访问存储在服务器环境中的 Secrets 或解密密钥。