Drone CI 中文文档

Docker 流水线

本教程将帮助你创建和执行一个简单的 Docker 流水线。请参阅我们的流水线 文档 了解详细的使用说明。

认证

首先,在浏览器中访问你的 Drone Server 地址。如果你尚未通过身份验证,Drone 会将你重定向到 GitHub 进行登录。

登录后,你将被重定向回你的 Drone Web 管理界面。如果这是你第一次使用 Drone,你的 Web 管理界面将在几秒钟内为空,而 Drone 会将你的存储库列表与 GitHub 同步。

启用你的存储库

接下来,搜索你的存储库并单击 Enable 按钮。单击启用按钮会在你的存储库中添加一个 Webhook,以便在你每次推送代码时通知 Drone。请注意,你必须拥有存储库的管理员权限才能启用。

配置你的流水线

接下来,你需要通过在 git 存储库的根目录中创建一个 .drone.yml 文件来配置流水线。在这个文件中,我们定义了每次收到 webhook 时执行的一系列步骤。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
kind: pipeline
type: docker
name: default

steps:
- name: greeting
  image: alpine
  commands:
  - echo hello
  - echo world

以下是此示例中使用变量的概览:

  • kind
    kind 属性定义了对象的种类。此示例定义了一个流水线对象。其他类型的对象是 secretsignature 对象。
  • type
    type 属性定义流水线的类型。此示例定义了一个 Docker 流水线,其中每个流水线步骤都在 Docker 容器内执行。Drone 支持 不同类型 的流水线执行环境。
  • name
    name 属性定义了流水线的名称。你可以为你的项目定义一个或多个流水线。
  • steps :Step 部分定义了一系列串行执行的流水线步骤。如果流水线中的任何步骤失败,流水线将立即退出。
    • name
      name 属性定义流水线步骤的名称。
    • image
      image 属性定义了一个容器镜像,shell 命令在其中执行。你可以使用来自任何容器注册表(Registry,包括私有容器注册表)的流水线中的任何镜像。
    • commands
      commands 属性将在容器内执行的 shell 命令列表定义为入口点。如果任何命令返回非零退出代码,则流水线步骤将失败。

请参阅我们的 流水线文档 以获取配置选项的完整列表。

其他示例

  • 你可以向流水线添加多个步骤:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    
    kind: pipeline
    type: docker
    name: greeting
    
    steps:
    - name: en
      image: alpine
      commands:
      - echo hello world
    
    - name: fr
      image: alpine
      commands:
      - echo bonjour monde
    
  • 你可以根据分支或 Webhook 事件,有条件地 限制流水线步骤执行

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    
    kind: pipeline
    type: docker
    name: greeting
    
    steps:
    - name: en
      image: alpine
      commands:
      - echo hello world
    
    - name: fr
      image: alpine
      commands:
      - echo bonjour monde
      when:
        branch:
        - develop
    
  • 你甚至可以定义多条流水线

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    kind: pipeline
    type: docker
    name: en
    
    steps:
    - name: greeting
      image: alpine
      commands:
      - echo hello world
    
    ---
    kind: pipeline
    type: docker
    name: fr
    
    steps:
    - name: greeting
      image: alpine
      commands:
      - echo bonjour monde
    
  • 你可以有条件地 限制 流水线执行:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
    kind: pipeline
    type: docker
    name: en
    
    steps:
    - name: greeting
      image: alpine
      commands:
      - echo hello world
    
    trigger:
      event:
      - push
    
    ---
    kind: pipeline
    type: docker
    name: fr
    
    steps:
    - name: greeting
      image: alpine
      commands:
      - echo bonjour monde
    
    trigger:
      event:
      - pull_request
    
  • 你可以使用任何 docker 注册表中的任何 image

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    kind: pipeline
    type: docker
    name: default
    
    steps:
    - name: test
      image: gcr.io/library/golang
      commands:
      - go build
      - go test -v
    
  • 你可以为集成测试定义 服务容器

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    
    kind: pipeline
    type: docker
    name: default
    
    steps:
    - name: test
      image: golang:1.13
      commands:
      - go build
      - go test -v
    
    services:
    - name: redis
      image: redis
    
  • 你可以使用 插件 与第三方系统集成并执行常见任务,例如通知、发布或部署软件。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    
    kind: pipeline
    type: docker
    name: default
    
    steps:
    - name: test
      image: golang:1.13
      commands:
      - go build
      - go test -v
    
    - name: notify
      image: plugins/slack
      settings:
        channel: dev
        webhook: https://hooks.slack.com/services/...
    
  • 你还可以从 secrets 获取敏感参数:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    
    kind: pipeline
    type: docker
    name: default
    
    steps:
    - name: test
      image: golang:1.13
      commands:
      - go build
      - go test -v
    
    - name: notify
      image: plugins/slack
      settings:
        channel: dev
        webhook:
          from_secret: endpoint
    

执行你的流水线

最后一步是将你的 .drone.yml 提交到你的存储库并推送你的更改。当你推送代码时,GitHub 会向 Drone 发送一个 Webhook,然后 Drone 会执行你的流水线。