0

我在drone.yml文件中定义了一些阶段。有没有办法通过命令行参数指定需要运行哪个阶段?例如:下面是我的drone.yml 文件。我想分别构建buildOnContainer1buildOnContainer2舞台。所以我正在寻找一个命令,例如drone exec buildOnContainer1. 它仅在buildOnContainer1.

buildOnContainer1:
    image: container1
    pull: true
    commands:
      - npm test:uat
buildOnContainer2:
    image: container2
    pull: true
    commands:
      - npm test:dev
4

1 回答 1

0

我首先想到的是通过环境变量来实现这种粒度级别的控制。

Drone 提供了在运行时替换环境变量的能力。这使我们能够在管道配置中使用动态构建或提交细节。

您可以将环境变量传递给命令行,也可以使用机密传递给 Drone 服务器。查看有关ENV 插值docker exec命令的 Drone 文档

您应该构建自定义映像container1container2运行命令或根据特定环境变量的值跳过它们。

一个肮脏的例子如下.drone.yml

buildOnContainer1:
  image: container1
  pull: true
  environment:
    - SKIP=${skip.buildOnContainer1}
  commands:
    - ./myscript.sh test:uat
buildOnContainer2:
  image: container2
  pull: true
  environment:
    - SKIP=${skip.buildOnContainer2}
  commands:
    - ./mysqcrypt.sh test:dev

您的自定义图像应该mysqcript.sh在您的工作目录中包含一个 bash 脚本。该脚本可以检查 ENVAR 的值SKIP是真还是假。如果true,它什么也不做。If falseis 将npm使用您传递给脚本的任何参数执行命令。

然后你可以在本地执行构建:

drone exec --secret skip.buildOnContainer1=true --secret skip.buildOnContainer2=false
于 2017-06-16T11:51:38.750 回答