Как передать учетные данные в sbt build cli?

Я пытаюсь Dockerize старую сборку sbt, которой требуется доступ к частному репозиторию нексуса. Раньше я использовал локальный файл учетных данных, на который ссылается build.sbt, но это не совсем подходит для моего использования в настоящее время, поскольку я хочу загрузить все из сборки Dockerfile. Я предпочитаю не выводить данные в файл, а затем копировать их в свой контейнер сборки докеров, а просто передавать их как ARG докеров.

Под https://www.scala-sbt.org/1.0/docs/Publishing.html

Я читал, что могу передать это так:

credentials += Credentials("Some Nexus Repository Manager", 
"my.artifact.repo.net", "admin", "admin123")

Поэтому я решил, что могу сделать что-то вроде:

ARG REPO_USER
ARG REPO_PWD
RUN sbt ";credentials += Credentials(\"Some Nexus Repository Manager\", \"repo.host.com\", ${REPO_USER}, ${REPO_PWD}) ;package"

а затем запустить

docker build . --build-arg REPO_USER=foobar --build-arg REPO_PWD=*****

в моем Dockerfile, но это не сработало. Я все еще получаю:

Не удалось найти учетные данные для [Sonatype Nexus Repository Manager @ repo.host.com]

Есть ли способ отлично передать учетные данные репо в sbt из cli?

Обновлять:

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

RUN echo "realm=Sonatype Nexus Repository Manager" >> .credentials && \
echo "host=repo.host.se" >> .credentials && \
echo "user=$REPO_USER" >> .credentials && \
echo "password=$REPO_PWD" >> .credentials && \
export SBT_CREDENTIALS=.credentials && \
sbt package

Обновление 2

Я думаю, что это больше не вопрос Docker, поскольку я отладил его в контейнере докеров. Sbt просто не получил бы мои кредиты, как бы я ни передавал его в соответствии с документами sbt.

Я отвечу на свой вопрос.

Попробуйте sbt ';set credentials ...'

laughedelic 02.11.2018 20:54

@laughedelic Еще удачи. Я даже пытался использовать файл с кредитами, но он все равно не работал, так что, возможно, я ошибаюсь в том, что на самом деле не так ...

Viktor Hedefalk 02.11.2018 21:19

почему вы храните crendentails в образе докера

Ijaz Ahmad Khan 02.11.2018 23:40

@IjazAhmadKhan Не хочу, но нужны кредиты для сборки, так как для сборки нужен доступ к частному репо. Делая это с многоэтапными сборками, я думаю, что смогу исправить эту проблему с безопасностью, как только я вообще заработаю. Предположение?

Viktor Hedefalk 02.11.2018 23:58

делать все за пределами докера, а затем копировать результаты в образ докера

Ijaz Ahmad Khan 03.11.2018 00:54

@IjazAhmadKhan. Вот воспроизводимые сборки с докером в. Как gitlab.ci drone.io.

Viktor Hedefalk 05.11.2018 10:55

да, вы можете иметь воспроизводимые сборки, просто выполняйте сборки в простой работе, а затем запускайте сборку докеров и используйте артефакт из предыдущей работы

Ijaz Ahmad Khan 05.11.2018 11:50

> просто делать сборки на простой работе, что такое обычная работа? Все задания определяются из образов докеров на указанных серверах сборки. Чтобы быть супер конкретным, моя сборка взята из hseeberger / scala-sbt: 11.0.1_2.12.7_1.2.6.

Viktor Hedefalk 05.11.2018 13:25
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
8
1 459
2

Ответы 2

Документы sbt в лучшем случае вводят в заблуждение или просто ошибочны. После отладки этого к битам в контейнере докеров я обнаружил, что у меня нет возможности передать команду creds, чтобы они были подобраны. Переменная SBT_CREDENTIALS тоже не работает.

Наконец-то меня спас этот комментарий: SBT не может найти учетные данные при попытке загрузки из виртуального репозитория Artifactory

Наименее навязчивый способ работы, который у меня есть, - это добавить файл конфигурации sbt в домашний каталог образа докера:

RUN mkdir .sbt/0.13/plugins && \
echo "credentials += Credentials(\"Sonatype Nexus Repository Manager\", \"repo.host.se\", \"$REPO_USER\", \"$REPO_PWD\")" >> .sbt/0.13/plugins/creds.sbt
RUN sbt package

Вы можете использовать переменные среды. Вы можете установить их в dockerfile прямо или из аргументов. Что-то вроде этого:

ARG REPO_USR
ARG REPO_PWD

ENV REPO_USR = ${REPO_USR}
ENV REPO_PWD = ${REPO_PWD}

Затем вы можете использовать переменные среды в sbt:

val repoUser = sys.env.get("REPO_USR").getOrElse("")
val repoPass = sys.env.get("REPO_PWS").getOrElse("")

credentials += Credentials("Repo Realm", "repo.url.com", repoUser, repoPass)

Затем вы можете передать аргументы в сборку докеров, и они будут переданы в sbt.

Проблема во второй части, я думаю, вы имеете в виду правку build.sbt. Я хотел, чтобы нет отредактировал сборку sbt, но Только добавил Dockerfile в репо и передал кредиты через CLI. Наименее навязчивый способ, который я нашел, - это позволить Dockerfile добавить отдельный файл sbt под $ HOME / .sbt изображения, потому что, похоже, нет способа передать кредиты sbt, не просматривая файл.

Viktor Hedefalk 05.11.2018 10:59

Другие вопросы по теме