Как использовать внешний скрипт внутри скрипта сборки CircleCI - PullRequest
0 голосов
/ 27 февраля 2019

Я хотел бы импортировать логику из сценария внешней оболочки как часть моей конфигурации 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, а затем сделать так, чтобы моя конфигурация сборки повторно использовала их из Сферы.Но скрипт foo.sh нельзя упаковать в сам Orb, поэтому мне нужен какой-то другой способ сделать его доступным внутри конфигурации сборки.

Итак, как я могу включить скрипт foo.sh (или любой другой скриптили исполняемый файл) в мой процесс сборки?

Что я вижу до сих пор (и почему я не думаю, что это лучший способ сделать это):

  1. Из документации CircleCI IЯ не вижу способа включить сценарии, такие как foo.sh, непосредственно в состав Orb.
  2. Я мог бы создать новый образ Docker на основе circleci/XXX, включить мой сценарий в этот образ Docker и вызвать егокаталог.Мне не очень нравится идея, так как скрипт не имеет ничего общего с изображением Docker, на котором он основан - я бы просто использовал Docker здесь как транспорт.
  3. Я мог бы wget сценарий из общедоступного места,временно сохраните его и затем вызовите изнутри работающего контейнера, который выполняет сценарий сборки.Но загрузка контента с общедоступного URL-адреса и последующее выполнение не подходят (и опечатка или какая-либо злонамеренная работа могут привести к тому, что я выполню какой-нибудь скрипт внешней оболочки, и бог знает, какой контент).Git-репозиторий со сценарием внутри локальной файловой системы внутри работающего контейнера сборки, а затем выполните сценарий.Чувствуется немного лучше, чем вариант (3).

Какие-нибудь идеи или лучшие практики, о которых я еще не думал?

...