Как передать учетные данные в sbt build cli? - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь докеризировать старую сборку sbt, которой нужен доступ к частному репозиторию Nexus. Ранее я использовал локальный файл учетных данных, указанный в 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, так как я отлаживал его в контейнере Docker, sbt просто не собирал мои кредиты в любом случае, как я прошел его в соответствии с документами sbt.

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

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Вы можете использовать переменные окружения. Вы можете установить их в 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.

0 голосов
/ 03 ноября 2018

Документы sbt в лучшем случае вводят в заблуждение или просто ошибаются. После отладки этого до кусочков в контейнере докера я обнаружил, что я не мог передать кредиты, поэтому их забрали. Переменная 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
...