Drone CI 中文文档

命令行 (CLI) Runner

你可以使用 命令行工具 在笔记本电脑或个人计算机上本地运行 Docker 流水线,用于开发和调试目的。这是我们对 它在我的电脑上可以正常运行 的常见抱怨的回答。

安装命令行 Runner

  • 使用 Homebrew 在 macOS 上安装命令行工具:

    brew install drone-cli
    
  • 使用 Scoop 在 Windows 上安装命令行工具:

    scoop isntall drone
    

命令行 Runner 用法

命令行 Runner 需要一个可以正常运行的 Docker 安装。Drone 使用本地 Docker 守护程序在主机上本地执行流水线。本地执行与 Drone Server 没有任何是通信。

  1. 导航到 .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
    
  2. 从命令行执行你的流水线:

    drone exec
    
  3. 该命令将流水线日志流式传输到你的终端进行分析。如果流水线失败,该命令将返回非零退出代码。

    $ 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
    

运行特定步骤

在本地运行流水线时,你可以限制执行哪些流水线步骤以及跳过哪些流水线步骤。

  • 以下为仅执行流水线步骤 buildtest 的示例命令

    drone exec --include=build --include=test
    
  • 以下为执行除 deploy 之外所有流水线步骤的示例命令

    drone exec --exclude=deploy
    

模拟 Secrets

命令行 Runner 没有读取存储在服务器中的机密的权限。你可以通过文本文件将机密传递给命令行 Runner,从而为本地流水线提供 Secrets 信息。

  1. 以下为需要用户名和密码环境变量的示例流水线配置,来自 Secrets。

    kind: pipeline
    type: docker
    name: default
    
    steps:
    - name: test
      environment:
        USERNAME:
          from_secret: USERNAME
        PASSWORD:
          from_secret: PASSWORD
    
  2. 创建一个简单的文本文件,其中每行以键值格式定义一个 Secrets。出于本演示的目的,我们将文件命名为 secrets.txt

    USERNAME=root
    PASSWORD=password
    
  3. 执行流水线时通过命令行标志(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 或解密密钥。