【问题标题】:How to use external script inside CircleCI build script如何在 CircleCI 构建脚本中使用外部脚本
【发布时间】: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 脚本(或任何其他脚本或可执行文件)包含到我的构建过程中?

到目前为止我所看到的(以及为什么我认为这不是最好的方法):

  1. 从 CircleCI 文档中,我看不到将 foo.sh 之类的脚本直接包含在 Orb 中的方法。
  2. 我可以基于circleci/XXX 创建一个新的 Docker 映像,在该 Docker 映像中包含我的脚本并将其命名为目录。我不太喜欢这个想法,因为脚本与它所基于的 Docker 映像无关——我只是在这里误用 Docker 作为交通工具。
  3. 我可以从公共位置wget 脚​​本,临时存储它,然后从正在执行构建脚本的运行容器中调用它。但是从公共 URL 加载内容然后执行感觉不太对(而且拼写错误或某些恶意工作可能导致我执行一些外来的 shell 脚本,而天知道是什么内容)。
  4. 我可以将一些带有脚本的 Git 存储库克隆到正在运行的构建容器内的本地文件系统中,然后执行该脚本。感觉比选项(3)好一点。

有什么我还没有想到的想法或最佳实践?

【问题讨论】:

    标签: continuous-integration circleci circleci-2.0


    【解决方案1】:

    那么我如何将 foo.sh 脚本(或任何其他脚本或可执行文件)包含到我的构建过程中?

    你将它打包在球体中。

    下面是一个圆形维护的球体中的一个例子:

    https://github.com/CircleCI-Public/slack-orb/blob/master/src/commands/notify.yml#L79

          command: <<include(scripts/notify.sh)>>
    

    引用https://github.com/CircleCI-Public/slack-orb/tree/master/src/scripts/notify.sh中的脚本

    【讨论】:

      【解决方案2】:
      1. 有效,一个很好的例子是为您的脚本使用 S3 存储桶和散列,您可以 wget 它们。检查哈希与您在 s3 中保存的哈希,以便您知道它是您的。

      2. 也不错。您可以在您的 circleci 环境中克隆另一个 repo,并将该 repo 用作脚本的来源。作为奖励,VCS 非常适合您的脚本。

      另一个选项是您可以利用 YAML 配置并使用 HEREDOC 将您的脚本嵌入到 config.yml 中。在运行中使用它:将您的 HEREDOC 回显到本地文件。这确实使配置更难阅读。也许 YAML 具有“包含”支持,因此您可以调用另一个文件来保持 config.yml 中的内容整洁。

      【讨论】:

      • 投反对票,因为尝试使用您刚刚推送到 s3 存储桶的外部脚本是......非常糟糕的版本控制。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-28
      相关资源
      最近更新 更多