Использование Jenkins Blue Ocean для развертывания сборок

Недавно я настраивал свою собственную небольшую установку CI/CD, используя Docker и Jenkins. Я установил новый плагин Blue Ocean для Jenkins и настроил конвейер, который: Извлекает из Git -> Запускает тесты -> Сборки. Который отлично работает.

Однако мне не удалось выяснить, как создать соответствующий шаг развертывания/публикации в конвейере. После сборки я хочу, чтобы контейнер Jenkins подключался по SSH к моему VPS, на котором запущены все контейнеры Docker, извлекал и затем пересобирал этот конкретный контейнер (используя Docker Compose).

Я заметил, что в Blue Ocean есть возможность ввести сценарий bash, который запустится после тестирования/сборки — это то, что мне следует использовать?

Я рассматривал возможность использования плагина Publish over SSH для Jenkins, но мне не удалось выяснить, работает ли этот плагин с Blue Ocean, и я не смог узнать, как создать ключи ssh для контейнера Jenkins, который будет использоваться.

Я был бы очень признателен за любые идеи/рекомендации о том, как я должен публиковать/создавать обновленные контейнеры.


person HarveyD    schedule 04.05.2017    source источник


Ответы (2)


Простого sh 'ssh...' шага должно быть достаточно, чтобы вызвать скрипт на вашем VPS, который (скрипт) будет обрабатывать все операции докера.

Если ваш закрытый ключ ssh защищен парольной фразой, вы можете заключить этот вызов в агент с шаги конвейера "ssh-agent":

node {
  sshagent (credentials: ['deploy-dev']) {
    sh 'ssh -o StrictHostKeyChecking=no -l cloudbees 192.168.1.106 uname -a'
  }
}

Как отмечает pmr, Подключаемый модуль JENKINS SSH Credentials Plugin можно использовать для хранения закрытого ключа ssh.
Вы также можете прочитать недавнюю статью "Управление учетными данными SSH с помощью Jenkins".

person VonC    schedule 04.05.2017
comment
Привет! Спасибо за Ваш ответ. Но я до сих пор не уверен, как мне получить ключи ssh для моего образа jenkins (поскольку он запускается в Docker). - person HarveyD; 04.05.2017
comment
@HarveyD, вы можете создать свой собственный образ jenkins с помощью Dockerfile, добавив (COPY) ключи ssh. - person VonC; 04.05.2017
comment
@HarveyD Используйте плагин учетных данных и сохраните их как учетные данные. - person pmr; 04.05.2017
comment
@pmr хорошая мысль (включена в ответ для большей наглядности.) - person VonC; 04.05.2017

Наконец-то заработало! Да, решение состояло в том, чтобы использовать плагин «ssh-agent» для Jenkins (работает с контейнером Jenkins Docker!).

Я сделал следующее:

  1. просто создал пару ключей ssh ​​на моей локальной машине (ssh-keygen)
  2. скопируйте id_rsa в плагин ssh-agent
  3. скопировал id_rsa.pub на машину, на которой я хотел запустить скрипт сборки/публикации

Моя ошибка заключалась в том, что я сразу же начал использовать BlueOcean, не понимая, как работают сборки в Jenkins. BlueOcean не поддерживает интеграцию с ssh-agent. Вы должны добавить:

sshagent (credentials: ['deploy-dev']) {
    sh 'ssh -o StrictHostKeyChecking=no -l cloudbees 192.168.1.106 uname -a'
}

В Jenkinsfile, который использует ваша сборка.

Я надеюсь, что это поможет всем остальным, кто сталкивается с теми же проблемами.

person HarveyD    schedule 04.05.2017
comment
Спасибо за этот подробный отзыв, в дополнение к моему ответу. +1 - person VonC; 04.05.2017