Как выполнять команды внутри Docker-контейнера от Jenkins - PullRequest
0 голосов
/ 01 июля 2019

Мое требование - вручную добавить сертификат в keystroe в Java, который находится в контейнере. Для этого я использую следующие команды.

sudo docker exec -it my-container-name bash -> войти внутрь контейнера

cd /java/lib/security -> каталог chnage для пути безопасности Java

keytool -keystore cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias testcert -file /cert/test-Base64.cer -> установить сертификат

Приведенные выше команды работают нормально. Теперь я хотел бы автоматизировать это от Дженкинса. Я имею в виду, я хочу, чтобы эти команды выполнялись после 'sudo docker-compose up -d'.

Может кто-нибудь, пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 01 июля 2019

Как правило, вы должны найти способы избежать docker exec, особенно для использования по сценарию, как это.(Вполне возможно, что автоматизированные задачи удалят и воссоздают контейнеры и не будут выполнять ваши шаги ручной настройки. Это вдвойне верно в кластеризованных средах, таких как Docker Swarm или Kubernetes.)

В случае, если у вас есть некоторые существующиеФайл хранилища ключей, который вы просто хотите вставить в контейнер, самый простой способ - вставить его во время запуска, используя опцию docker run -v.Вам уже нужен полностью заполненный файл хранилища ключей.

docker run \
  -v $PWD/keystore.jks:/usr/lib/java/jre/lib/security/keystore.jks \
  ...

Если вы не можете внедрить полностью заполненный файл хранилища ключей во время запуска, вы можете написать скрипт, который запускается во время запуска контейнера.Он ищет какой-то известный каталог, запускает команду keytool для каждого файла, а затем запускает команду, переданную в качестве аргументов командной строки.

#!/bin/sh
if [ -d /cert ]; then
  for f in /cert/*.cer; do
    keytool ... -file "$f"
  done
fi
exec "$@"

В вашем Dockerfile скопируйте этот скриптв и сделать его ВХОДНОЙ ТОЧКОЙ.Если у вас ранее была строка ENTRYPOINT ["java", ...], измените ее на CMD.Это будет выглядеть примерно так:

FROM java:8
...
COPY entrypoint.sh /app
ENTRYPOINT ["/app/entrypoint.sh"]
CMD ["java", "-jar", "/app/myapp.jar"]

Затем, когда вы запустите контейнер, введите каталог /cert

docker run \
  -v $PWD/cert:/cert \
  ...
0 голосов
/ 01 июля 2019

Если вы все еще хотите сделать это после запуска контейнера, используйте

sudo docker exec -it my-container-name bash -c "cd /java/lib/security; keytool -keystore cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias testcert -file /cert/test-Base64.cer"
...