Как использовать частные репозитории в файле Dockerfile на circleci

# #docker #go #circleci

Вопрос:

Я начинаю создавать и развертывать небольшое приложение go с использованием circleci. Мое приложение также использует частное хранилище, и я настроил circleci с ключом ssh для извлечения этого репозитория. Итак, в задании по сборке у меня есть шаг загрузки модов go, и это отлично работает.

Следующим шагом является создание образа docker, в файле Dockerfile я выполняю сборку, подобную этой;

go build -o app ./app/

Это также загружает зависимости, одна из которых является частным репо. Каков был бы здесь наилучший путь вперед? Должен ли я передавать ssh-ключ в файл dockerfile, чтобы его можно было получить в docker?

Ответ №1:

Таким образом, после более детального изучения, кажется, что разные задания выполняются в разных контейнерах или средах сборки, поэтому следующий шаг не имеет доступа к частным репозиториям, которые уже были загружены.

Чтобы обойти это, я передаю ключ github вот так: extra_build_args: --build-arg SSH_PRIVATE_KEY="$(cat ~/.ssh/id_rsa)"

и я использую этот шар circleci/gcp-gcr@0.13.0.

Затем в моем файле Dockerfile: я выполняю некоторое форматирование и настраиваю использование ssh вместо https.

Пример такой:

 RUN mkdir -p ~/.ssh amp;amp; umask 0077 amp;amp; echo "${SSH_PRIVATE_KEY}" > ~/.ssh/id_rsa 
amp;amp; git config --global url."git@github.com:".insteadOf https://github.com/ 
amp;amp; ssh-keyscan github.com >> ~/.ssh/known_hosts
ENV GOPRIVATE github.com/my-private-org/secret-repo
 

Также открыт для любых других предложений. Пока что это работает на меня.