Скопируйте исходный код из github в Docker-контейнер в Jenkins - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть исходный код в моем github.Я собрал в jenkins работу по созданию свободного стиля и дал репозиторий git в разделе SCM.Мне нужно написать сценарий оболочки, чтобы скопировать этот исходный код в контейнер, работающий снаружи.Может кто-нибудь, пожалуйста, помогите.

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

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

В этом ответе предполагается, что (на основе вашего комментария):

  • у вас есть контрагент, в котором у вас есть хранилище git bare (A),
  • у вас есть контрагент, в котором выустановите jenkins (B),
  • , который вы хотите клонировать / получить код из (A) в (B).

В контейнере B вам нужно:

  • создать пару ключей ssh ​​
  • после настройки A, клонировать код, выполнив git clone ssh://username@containerA/path/to/repo.git

В контейнере A вам нужно:

  • создать пользователя username
  • скопировать открытый ключ, сгенерированный на B, в username ~/.ssh/authorized_keys
  • открыть 22 порт
0 голосов
/ 27 сентября 2018

Хороший вопрос.

Почти во всех реальных случаях Jenkins должен требовать некоторый тип связи с целевыми серверами, такими как, tomcat, jboss, контейнеры и т. Д.

В случае tomcat или jboss для java-приложений эти серверы предоставляютконечная точка http, которая позволяет удаленным клиентам (таким как jenkins) или плагинам загружать артефакты сборки для их развертывания.

В случае решений для докеров, jenkins должен иметь возможность подключаться к хосту докера для выполнения таких команд докера, каксборка, запуск и т. д.

В случае решений saas, таких как heroku, openshift и т. д., ими управляет весь комплекс инфраструктуры.Пользователю разработчика нужно только нажать исходный код.

Здесь некоторые подходы

Подход 1. Копирование файлов с хоста jenkins в контейнер

Этопример того, как копировать файлы с хоста в живой контейнер

docker cp /file/in/host/foo.txt mycontainer:/foo.txt

Выполнить эту строку от jenkins до локального докера (если ваш jenkins находится на том же хосте вашего контейнера Docker) или удаленно вудаленный linux (в случае, если jenkins и docker находятся на разных машинах).

Во втором случае (удаленный docker) весь код также должен быть клонирован на удаленном компьютере.

Возможно, вы можете сжать исходный код, прежде чем скопировать его в контейнер.

Дженкинс должен иметь доступ к докеру для выполнения команд докера.

Подход 2: Развернуть конечную точку

  • Разработать контейнер, который предоставляет конечную точку с именем / deploy .Эта конечная точка получает ваш артефакт, такой как java, или просто файл, такой как php, nodejs и т. Д.
  • От jenkins отправьте артефакт, выполнив запрос http на / deploy
  • OtherИдеи: / deploy должен возвращать успех или неудачу, чтобы определить состояние развертывания

Этот подход понятен, поскольку вам не нужны сумасшедшие сценарии оболочки для передачи артефактов или исходного кода в живой док-контейнер.

В этом случае Jenkins не требуется низкоуровневая связь (ssh) с вашим док-контейнером.Даже ваше контейнерное приложение может быть развернуто в другом облаке, например, Amazon, Azure или Google.

Подход 3: клонировать исходный код внутри контейнера

  • Создать образ докера с готовыми конфигурациями, такими как: ssh-agent, git, language (java), узел и т. д.) и т. д.
  • Клонировать исходный код внутри контейнера на этапе сборки или запуска
  • Когда изображение создается или запускается, выполняйте следующие задачи в следующем порядке: клонируйте исходный код, выполните сборку и запустите,
  • Jenkins просто создаст или запустит этот образ docker run ... отправив такие параметры, как git_url и т. Д.

Jenkins должен иметь доступ к докеру для выполнения команд Docker.

Подход 4: Создать что-то вроде heroku или openshift

  • Реализация подхода 3
  • Detectсобытие git push с использованием конфигураций webhook в jenkins: (https://jrichardsz.github.io/devops/devops-with-git-and-jenkins-using-webhooks)
  • При обнаружении события push jenkins должен определить язык программирования репозитория и запустить ваш крутой образ докера Approach 3 .
  • Уведомлять о результатах развертывания по электронной почте или что-то в этом роде.
  • Сделать открытым исходным кодом
...