我在drone.yml
文件中定义了一些阶段。有没有办法指定需要通过命令行参数运行哪个阶段?例如:下面是我的drone.yml文件。我想分别构建buildOnContainer1
和buildOnContainer2
舞台。所以我正在寻找一个命令,例如drone exec buildOnContainer1
.它仅在buildOnContainer1
下运行命令。
buildOnContainer1:
image: container1
pull: true
commands:
- npm test:uat
buildOnContainer2:
image: container2
pull: true
commands:
- npm test:dev
实现这种粒度级别的控制的第一个想法是通过环境变量。
无人机提供了在运行时替换环境变量的功能。这使我们能够在工作流配置中使用动态构建或提交详细信息。
您可以使用机密将环境变量传递到命令行和 Drone 服务器。检查有关 ENV 插值和docker exec
命令的无人机文档
您应该为container1
和container2
构建自定义映像,以便根据特定环境变量的值运行命令或跳过它们。
一个肮脏的例子是类似于以下.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 脚本。该脚本可以检查 ENVARSKIP
的值是真还是假。如果true
,它将什么也不做。如果false
将使用您传递给脚本的任何参数执行npm
命令。
然后,您可以在本地执行构建:
drone exec --secret skip.buildOnContainer1=true --secret skip.buildOnContainer2=false