持续集成 (CI) 是云原生应用程序开发的关键要素。随着容器构成云原生架构的基础,开发人员需要将他们的版本控制系统与 CI 工具集成。

有一种说法是持续集成需要基于云的基础架构。尽管 CI 对生产版本有意义,但开发人员需要先构建和测试管道,然后才能与团队共享 - 或者能够在笔记本电脑上执行持续集成 (CI)。今天真的可以吗?

介绍 Drone CI 管道

一个名为Drone CI的开源项目使这成为现实。Drone拥有超过 25,700 名 GitHub 明星和 300 多名贡献者,是一个云原生的自助式 CI 平台。Drone CI 提供了一个成熟的、基于容器的系统,该系统利用了云原生架构的可扩展性和容错特性。它可以帮助您构建简单、解耦和声明性的容器友好型管道。

Drone 是一个基于容器的管道引擎,可让您将任何现有容器作为管道的一部分运行,或者将构建逻辑打包到称为Drone Plugins的可重用容器中。

Drone 插件可根据需要进行配置,并允许在您的组织内或一般社区内分发容器。

从 Docker Desktop 运行 Drone CI 管道

对于使用去中心化工具的开发人员来说,构建和部署微服务应用程序的任务可能是巨大的。在这些环境中安装、管理和使用这些应用程序很棘手。这就是 Docker Extensions 的用武之地。通过 Docker Extensions,开发人员工具直接集成到 Docker Desktop 中——为您提供简化的管理工作流程。更容易优化和转变您的开发流程。

Docker Desktop 的 Drone CI 扩展为开发机器带来了 CI。您现在可以将 Drone CI 管道导入 Docker Desktop 并在本地运行它们。您还可以运行管道的特定步骤、监控执行结果和检查日志。

设置 Drone CI 管道

在本指南中,您将学习如何在 Docker Desktop 上从头开始设置 Drone CI 管道。

首先,您将在 Docker Desktop 中安装 Drone CI 扩展。其次,您将学习如何发现无人机管道。第三,您将了解如何在 Visual Studio Code 上打开 Drone 管道。最后,您将了解如何在受信任模式下运行 CI 管道,从而授予它们在主机上的提升权限。让我们跳进去。

先决条件

在开始之前,您需要下载 Docker Desktop 4.8 或更高版本。确保为您的操作系统选择正确的版本,然后安装它。

接下来,进入 Docker Desktop 并确认 Docker Extensions 功能已启用。单击设置齿轮 > 扩展选项卡 > 选中“启用 Docker 扩展”框。

安装 Drone CI Docker 扩展

Drone CI 目前在 Extensions Marketplace 上不可用,因此您必须通过 CLI 下载它。启动终端并运行以下命令来安装 Drone CI 扩展:

docker extension install drone/drone-ci-docker-extension:latest

Drone CI 扩展将很快出现在 Docker Dashboard 的左侧边栏中,位于 Extensions 标题下方:

进口无人机管道

您可以单击“导入管道”选项来指定 Drone CI 管道(drone.yml文件)所在的主机文件系统路径。如果这是您第一次使用 Drone CI 管道,您可以使用我们GitHub 存储库中的示例。

​​

在上面的记录中,我们使用long-run-demo 示例运行了一个本地管道,该管道执行长时间运行的睡眠命令。这发生在 Docker 容器中。

kind: pipeline
type: docker
name: sleep-demos
steps: 
  - name: sleep5
    image: busybox
    pull: if-not-exists
    commands:
    - x=0;while [ $x -lt 5 ]; do echo "hello"; sleep 1; x=$((x+1)); done
  - name: an error step
    image: busybox
    pull: if-not-exists
    commands:
    - yq --help

您可以从Drone CI GitHub 页面下载此管道 YAML 文件。

该文件以pipeline定义 CI 管道的对象开头。该type属性定义了您在执行该管道时首选的运行时。

Drone 支持众多运行程序,例如 docker、kubernetes等。该扩展目前仅支持管道。每个管道都会启动一个 Docker 容器,并将相应的定义为图像属性的一部分。docker stepimagestep

每个步骤都定义了一个名为 的属性commands。这是我们希望在构建过程中执行的 shell 命令列表。定义的命令列表将被转换为 shell 脚本并设置为 Docker 容器的ENTRYPOINT. 如果任何命令(例如,yq在这种情况下丢失的命令)返回非零退出代码,则管道将失败并退出。

鼠鼠下载器(dmd.moyu.moe),B站所有视频都支持下载,不限速跑满宽带!

通过 Drone CI 在 VS Code 中更快地编辑您的管道

Visual Studio Code (VS Code) 是一个轻量级、广受欢迎的 IDE。它支持 JavaScript、TypeScript 和 Node.js。VS Code 还为许多其他语言和运行时提供了丰富的扩展生态系统。

在 VS Code 中打开 Drone 管道项目只需几秒钟即可在 Docker Desktop 中:

此功能可帮助您快速查看管道并添加、编辑或删除步骤,然后从 Docker Desktop 运行它们。它可以让您在测试新的管道更改时更快地进行迭代。

在 CI 管道中运行特定步骤

Drone CI 扩展允许您随时在 CI 管道中运行各个步骤。为了更好地理解此功能,让我们检查以下Drone YAML 文件:

kind: pipeline
type: docker
name: sleep-demos
steps: 
  - name: sleep5
    image: busybox
    pull: if-not-exists
    commands:
    - x=0;while [ $x -lt 5 ]; do echo "hello"; sleep 1; x=$((x+1)); done
  - name: an error step
    image: busybox
    pull: if-not-exists
    commands:
    - yq --help

在此示例中,定义为的第一个管道步骤sleep5允许您执行 shell 脚本 ( echo “hello”) 5 秒钟,然后停止(忽略error step)。下面的视频向您展示了如何sleep-demos在管道中运行特定阶段:

​​

在受信任模式下运行步骤

有时,您需要以提升的权限运行 CI 管道。这些特权使用户能够系统地做比标准用户更多的事情。这类似于我们在命令中 传递--privileged=true参数的方式。docker run

当您执行 时docker run --privileged,Docker 将允许访问所有主机设备并在 AppArmor 或 SELinux 中设置配置。这些设置可以授予容器对主机的几乎平等的访问权限,就像在主机上的容器外部运行的进程一样。

Dronetrusted模式告诉您的容器运行时在主机上以提升的权限运行管道容器。除其他外,trusted模式可以帮助您:

  • 将 Docker 主机套接字挂载到管道容器上

  • 将主机路径挂载到 Docker 容器

​​

使用环境变量文件运行管道

Drone CI 扩展允许您为各个构建步骤定义环境变量。您可以在管道步骤中设置这些。就像docker run提供了一种将环境变量传递给正在运行的容器的方法一样,Drone 允许您将可用的环境变量传递给您的构建。考虑以下Drone YAML 文件:

kind: pipeline
type: docker
name: default
steps: 
  - name: display environment variables
    image: busybox
    pull: if-not-exists
    commands:
    - printenv

该文件以pipeline定义 CI 管道的对象开头。该type属性在执行该管道时定义了您首选的运行时(在我们的例子中是 Docker)。该platform部分帮助配置目标操作系统和架构(如arm64)并将管道路由到适当的运行器。如果未指定,系统默认为 Linux amd64。

该steps部分定义了一系列 shell 命令。这些命令在busyboxDocker 容器中作为ENTRYPOINT. 如图所示,如果您在my-env文件中声明了以下环境变量,该命令将打印环境变量:

DRONE_DESKTOP_FOO=foo
DRONE_DESKTOP_BAR=bar

您可以选择您喜欢的环境文件并运行 CI 管道(如下图所示):

如果您尝试导入 CI 管道,则可以打印每个环境变量。

使用机密文件运行管道

我们使用存储库机密来存储和管理敏感信息,例如密码、令牌和 ssh 密钥。将此信息存储为机密被认为比将其存储在纯文本配置文件中更安全。

注意: Drone 会在将秘密使用的所有值打印到标准输出和错误时屏蔽它们。

Drone CI 扩展允许您选择您喜欢的秘密文件并在您的 CI 管道中使用它,如下所示:

移除管道

您只需一步即可删除 CI 管道。选择一个或多个 Drone 管道并通过单击仪表板右侧的红色减号 (“-”) 按钮将其删除。此操作只会从 Docker Desktop 中删除管道 -而不会从您的文件系统中删除它们。

结论

Drone 是一个现代、强大、容器友好的 CI,它使繁忙的开发团队能够自动化他们的工作流程。这大大缩短了构建、测试和发布周期。使用 Drone 服务器,开发团队可以构建和部署云应用程序。这些利用了 Kubernetes 等云原生架构的扩展和容错特性。

查看Drone 的文档以开始在您的机器上使用 CI。通过 Drone CI 扩展,开发人员现在可以在本地运行他们的 Drone CI 管道,就像在他们的 CI 系统中一样

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐