Дженкинс С.И. развертывание образа докера на Heroku - PullRequest
0 голосов
/ 02 мая 2019

У меня есть CI Jenkins CI, и я использую его для сборки (mvn) и создания контейнера (docker) моего приложения с использованием конвейерного сценария Jenkins.Наконец, я хочу развернуть свой контейнер в Heroku dyno (я уже создал приложение).

Я проследовал за этой документацией https://devcenter.heroku.com/articles/container-registry-and-runtime и успешно отправил мой образ докера в registry.heroku.com/sunset-sailing-4049/web.

Проблема заключается в том, что после этого объявления https://devcenter.heroku.com/changelog-items/1426 Теперь мне нужно явно выполнить «heroku container: release web», чтобы мой докер-контейнер работал из реестра в приложение dyno.Вот где я застрял по-королевски.См. Мои следующие выпуски:

  1. Дженкинс не узнал Героку.(Мой Jenkins работает на ec2, я установил инструментальный пояс heroku как пользователь ec2. Но Jenkins выдает ошибку: heroku: команда не найдена).Как мне решить эту проблему?

  2. Как выполнить «вход в систему с помощью heroku» от Jenkins, поскольку команда login запрашивает вход в браузер.Я добавил ключ ssh, но я не знаю, как использовать его из командной строки, поэтому Дженкинс "сценарий оболочки"

Единственный другой способ, который я мог придумать, - это развертывание через конвейер heroku.использование фиктивного репозитория git, в который Jenkins будет загружать исходный код при успешной сборке.

Буду очень признателен за помощь в решении 2 вышеуказанных проблем.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 07 мая 2019

(пишите здесь, если кто-то сталкивается с тем же сценарием) хорошо, я принял предложение @ vladimir и сделал следующее:

Команда Heroku (для Дженкинса, работающего на ec2):

  • Следующая команда необходима для передачи встроенного образа докера в heroku с помощью jenkins / или другого инструмента ci / cd; Из-за недавнего изменения (https://devcenter.heroku.com/changelog-items/1426) нажатие на реестр heroku больше не достаточно. Для выполнения приведенной ниже команды вам необходимо установить пояс для инструментов heroku.

    Контейнер Heroku: веб-релиз

  • Установить оснастку на Amazon Linux, как показано ниже:

следуйте инструкциям для включения epel https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/add-repositories.html

Затем измените /etc/yum.repos.d/epel.repo. Под разделом, помеченным [epel], измените enable = 0 на enabled = 1.

Тогда сделай

sudo yum install epel-release
sudo yum install yum-plugin-copr
sudo yum copr enable ngompa/snapcore-el7
sudo yum -y install snapd
sudo systemctl enable --now snapd.socket

Затем установите Heroku Toolbelt:

sudo snap install --classic heroku

Развертывание в Docker образа на heroku:

В скрипте Jenkins:

withCredentials([string(credentialsId: 'heroku-api-cred', variable: 'herokuRegistryApiCred')]) {
        sh "docker login -u email@example.com -p ${herokuRegistryApiCred} registry.heroku.com"          
    }
    // Tag docker img (in my case it was an image in dockerhub)
    sh "docker tag dockerhubusername/pvtreponame:${imageTag} registry.heroku.com/your_app_name/release_type[ie>web]"
    sh "docker push registry.heroku.com/your_app_name/web"
    sh "/usr/local/bin/heroku container:release web --app=your_app_name"
    sh "docker logout registry.heroku.com"

Чтобы запустить приложение в Docker (в моем случае это была Java), мне пришлось добавить следующую строку (в противном случае она зависала, потому что: 1. сообщить приложению о привязке порта в heroku. 2. сообщить веб-процессу о запуске команды. ENTRYPOINT ["java", "- jar", "my_spring_boot_app-0.0.1-SNAPSHOT.jar"] не работает на heroku.):

CMD ["web", "java $JAVA_OPTS -Dserver.port=$PORT -jar /usr/app/my_spring_boot_app-0.0.1-SNAPSHOT.jar"]
0 голосов
/ 02 мая 2019
  1. Вам нужно установить heroku как пользователь, под которым работает jenkins.Или, если вы установили его глобально, это может быть не в PATH пользователя, под которым работает jenkins.Существует несколько вариантов настройки PATH:

    • Установить для конкретной команды.Если ваша работа конвейерная, просто введите команду heroku в withEnv closure:

      withEnv(['PATH+HEROKU=/use/local/bin/']) { your heroku command here }

    • Установить путь для подчиненного jenkins: перейдите к [УправлениеJenkins] -> [Управление узлами], настройте свой узел и задайте для переменной среды PATH значение $PATH:/use/local/bin/.Таким образом, все задания, выполняемые на ведомом устройстве, будут вставлены в переменную среды.

  2. Для автоматизированного взаимодействия с клиентом heroku поддерживает токены API.Вы можете поместить его в ~/.netrc на сборочной машине или указать в качестве переменной среды (см. здесь ).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...