# #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
Также открыт для любых других предложений. Пока что это работает на меня.