【发布时间】:2019-02-27 13:21:23
【问题描述】:
我想从外部 shell 脚本导入逻辑,作为我的 CircleCI 配置的一部分,我正在寻找“正确”(或最佳)的方式来做到这一点。
假设我有以下 config.yml 用于 CircleCI:
version: 2.1
jobs:
build:
docker:
- image: circleci/ruby:2.5.3-node-browsers
steps:
- checkout
- run:
name: Compute some value
command: |
SOME_VALUE=$(foo.sh)
- run:
name: Reuse some value
command: |
echo "Hello" > /a/path/${SOME_VALUE}.txt
总体思路是将这些步骤封装到 CircleCI Orb 中,然后让我的构建配置从 Orb 重用它们。但是foo.sh 脚本不能被打包到 Orb 本身,所以我需要一些其他的方法让它在构建配置中可以访问。
那么我如何将foo.sh 脚本(或任何其他脚本或可执行文件)包含到我的构建过程中?
到目前为止我所看到的(以及为什么我认为这不是最好的方法):
- 从 CircleCI 文档中,我看不到将
foo.sh之类的脚本直接包含在 Orb 中的方法。 - 我可以基于
circleci/XXX创建一个新的 Docker 映像,在该 Docker 映像中包含我的脚本并将其命名为目录。我不太喜欢这个想法,因为脚本与它所基于的 Docker 映像无关——我只是在这里误用 Docker 作为交通工具。 - 我可以从公共位置
wget脚本,临时存储它,然后从正在执行构建脚本的运行容器中调用它。但是从公共 URL 加载内容然后执行感觉不太对(而且拼写错误或某些恶意工作可能导致我执行一些外来的 shell 脚本,而天知道是什么内容)。 - 我可以将一些带有脚本的 Git 存储库克隆到正在运行的构建容器内的本地文件系统中,然后执行该脚本。感觉比选项(3)好一点。
有什么我还没有想到的想法或最佳实践?
【问题讨论】:
标签: continuous-integration circleci circleci-2.0