有没有办法在drone.yml中定义构建阶段?

时间:2017-05-12 00:24:45

标签: drone drone.io

我在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

1 个答案:

答案 0 :(得分:0)

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

  

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

您可以使用机密将环境变量传递到命令行,也传递给Drone服务器。查看ENV interpolationdocker exec command

上的无人机文档

您应该为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还是false。如果true,则无效。如果false是执行npm命令,则使用您传递给脚本的任何args。

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

drone exec --secret skip.buildOnContainer1=true --secret skip.buildOnContainer2=false