.github-corner:hover .octo-arm{animation:octocat-wave 560ms ease-in-out}@keyframes octocat-wave{0%,100%{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm{animation:none}.github-corner .octo-arm{animation:octocat-wave 560ms ease-in-out}}
Дженкинс (Создавайте великие вещи в любом масштабе)
что такое Дженкинс?
JenkinsЭто программное обеспечение с открытым исходным кодом CI (непрерывная интеграция: непрерывная интеграция) и CD (непрерывная доставка: непрерывная доставка), предоставляющее более 1000 подключаемых модулей для поддержки построения, развертывания, автоматизации, удовлетворения потребностей любого проекта, поддержки различные методы работы, через системный пакет, Docker или через автономную программу Java.
принцип:Посмотрите на картинку (чертежное оборудование)
зачем использовать Дженкинс?
- Непрерывная интеграция и непрерывная доставка: В качестве масштабируемого сервера автоматизации Jenkins можно использовать как простой CI-сервер или превратить в центр непрерывной доставки для любого проекта.
- Простая установка: Jenkins — это отдельная программа на основе Java, которая сразу запускается с Windows, Mac OS X и другими Unix-подобными операционными системами.
- Простая конфигурация: Jenkins можно легко установить и настроить через веб-интерфейс, который включает в себя мгновенную проверку ошибок и встроенную справку.
- плагин: Имея более 1000 подключаемых модулей в Центре обновлений, Jenkins интегрируется практически со всеми инструментами в цепочке инструментов непрерывной интеграции и непрерывной доставки.
- расширять: Jenkins расширяется благодаря своей архитектуре плагинов, предоставляя почти безграничные возможности для того, что может делать Jenkins.
- распределенный: Jenkins может легко распределять работу между несколькими машинами, помогая быстрее запускать сборки, тесты и развертывания на нескольких платформах.
Install
Окружение: ubuntu, докер, git
$ cat /etc/issue
Ubuntu 16.04.6 LTS \n \l
На основе докера, если вы не знакомы, вы можете взглянуть на мою предыдущую статьюПередняя дорога: идти в ногу с трендом, простое применение докера
-
тянуть зеркало
$ docker pull jenkinsci/blueocean
-
Запустите контейнер на основе полученного изображения Jenkins.
$ docker run \ -d \ --name jenkins \ -u root \ -p 49001:8080 \ -v /var/jenkins_home:/var/jenkins_home \ -v /var/jenkins_ssh:/root/.ssh \ -v /var/run/docker.sock:/var/run/docker.sock \ jenkinsci/blueocean
объяснять:
-
-d
: режим демона, работающий в фоновом режиме. -
-p
: сопоставление портов, 49001 — порт сервера (вы можете изменить его в соответствии со своей ситуацией, не забудьте открыть порт группы безопасности), 8080 — порт контейнера (порт по умолчанию для программы jenkins). -
-v
: смонтировать том данных,/var/jenkins_home:/var/jenkins_home
: смонтировать каталог Jenkins на хост;/var/jenkins_ssh:/root/.ssh
: подключите ssh Дженкинса к хосту для резервного копирования, чтобы предотвратить его потерю после перезапуска.
-
-
Проверьте статус работы контейнера:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 08a54d4a804a jenkinsci/blueocean "/sbin/tini -- /usr/…" 7 days ago Up 7 days 50000/tcp, 0.0.0.0:49001->8080/tcp jenkins
Прикрепил:
Приведенные выше инструкции были выполнены успешно. Если контейнер неожиданно завершает работу, удалите параметр -d для выполнения и проверьте журнал для устранения неполадок.
-
Теперь приступайте к настройке Jenkins, зайдите в браузере
你的服务器ip:49001
, появится следующий интерфейс:-
Если вы хотите войти, вам нужно сначала разблокировать, пароль находится в
/var/jenkins_home/secrets/initialAdminPassword
В файле как это проверить? Два варианта:- Сначала войдите в только что запущенный контейнер jenkins и выполните
$ docker exec -it jenkins bash
,Потом$ cat /var/jenkins_home/secrets/initialAdminPassword
. - Поскольку каталог Jenkins был смонтирован на хосте при запуске контейнера, его можно выполнить прямо на хосте, не входя в контейнер.
$ sudo cat /var/jenkins_home/secrets/initialAdminPassword
.
- Сначала войдите в только что запущенный контейнер jenkins и выполните
-
Скопируйте пароль с предыдущего шага в браузер и нажмите кнопку «Продолжить», чтобы перейти к следующему шагу. Прикрепил:
-
Чтобы установить плагин, выберите «Рекомендуется для установки».
-
=================================================
Выше приведена базовая установка. Я использую официальную документацию или английский язык. В настоящее время он поддерживает китайский язык. Для получения более подробной информации перейдите по ссылкеОфициальный сайт, давайте начнем учить вас создавать новыйБесплатные задачи сборки(Ввиду того, что большинство онлайн туториалов многомашинные, то есть проект и дженкинс находятся не на одном сервере, и учитывая, что у друзей может быть только одна своя машина, о чем я и буду говорить нижеЗапуск проекта и Jenkins на одной машине)
=================================================
- Открыть
ip:49001
Войдите на домашнюю страницу, нажмите «Управление системой»:
-
Сначала нажмите на управление плагинами, найдите и установите плагин (если список установленных уже существует, его можно игнорировать):
- Build Name Setter
- Плагин Dingding[Dingding]
- Build Timestamp Plugin
- Git Parameter Plug-In
- Publish Over SSH
- SSH Slaves plugin
- Timestamper
-
Затем нажмите Системные настройки:
-
оказаться
Build Timestamp
(предоставляется плагином выше), выполните следующие настройки:- Asia/Shanghai
- yyyy-MM-dd-HH-mm-ss-SSS
-
оказаться
Publish over SSH
, это относительно хлопотно, установите следующим образом:проиллюстрировать:
- Парольная фраза: пароль SSH. Возможны два случая: 1. При использовании имени пользователя/пароля для входа в систему используется пароль имени пользователя 2. При использовании закрытого ключа для входа в систему используется пароль закрытого ключа.
- Путь к ключу: путь к файлу закрытого ключа SSH. Может быть абсолютным путем или относительным путем относительно $JENKINS_HOME.
- Ключ: закрытый ключ, экспортируется текстовое содержимое после закрытого ключа. При условии, что заданы и «Ключ», и «Путь к ключу», приоритет «Ключа» выше. В настоящее время содержимое, заданное в «Парольной фразе», должен быть таким же, как у закрытого ключа.
- Disable exec: отключает выполнение команды на целевой машине. Если этот флажок установлен, команда, заданная в параметре «Exec command» в конфигурации задания, будет игнорироваться.
Дополнение: поскольку Jenkins работает в контейнере докеров, приведенная выше конфигурация должна быть конфигурацией ssh контейнера, а не хост-компьютера. Как показано на рисунке выше, я вхожу через закрытый ключ ssh.
шаг:
-
$ docker exec -it jenkins sh
, в контейнер. -
$ ssh-keygen -m PEM -t rsa -b 4096
, сгенерируйте закрытый ключ ssh и открытый ключ (по умолчанию в~/.ssh
который/root/.ssh
Directory), можно нажать Enter до упора, если вы установили пароль, то нужно заполнить «Passphrase». -
$ cat ~/.ssh/id_rsa
, проверьте закрытый ключ и скопируйте закрытый ключ в параметр «ключ» на рисунке выше. -
$ cat ~/.ssh/id_rsa.pub
, просмотреть открытый ключ, скопировать открытый ключ на хост~/.ssh/authorized_keys
середина.
На этом настройка ssh Jenkins завершена, и следующим шагом будет настройка SSH-серверов удаленной машины (мы — одна машина, поэтому хост-машина настроена как удаленная машина):
проиллюстрировать:
- Имя: Имя конфигурации узла SSH, можно задать по желанию, оно будет в выпадающем списке "SSH Server" в конфигурации задания, как показано на рисунке:
- Имя хоста: имя хоста или IP-адрес машины для подключения через SSH.
- Имя пользователя: имя пользователя, используемое службой SSH, и имя пользователя, указанное для ключа при использовании ключа для подключения.
- Удаленная Derictory: Папка, которая фактически существует на удаленной машине, и пользователь, указанный в поле «Имя пользователя», имеет разрешение на доступ к этой папке. Плагин будет передавать файлы в эту папку. Обычно это каталог, в котором хранится проект.
-
-
Тест, нажмите кнопку «Проверить конфигурацию», например, успех, конфигурация прошла успешно, перейдите к следующему шагу и создайте новую задачу.
Начнем новую задачу:
-
Нажмите «Новая задача» на главной странице, введите имя (рекомендуется, чтобы оно соответствовало названию проекта на github), выберите первый «Создать проект программного обеспечения в свободном стиле», а затем нажмите «ОК»:
-
Вернитесь на домашнюю страницу, вы увидите только что созданную задачу в списке, щелкните имя, чтобы ввести сведения о задаче:
-
На странице сведений о задаче нажмите «Настроить», чтобы настроить проект:Конфигурация: Добавлено: (скрипты оболочки все впроектв каталоге развертывания)
-
Исполнительная команда:
#!/usr/bin/env bash echo '************************************** 发送至服务器成功 **********************************************' # 项目名,取自环境变量 projectName="${JOB_NAME}" dockerImageName=${projectName}-${BUILD_TIMESTAMP} # step1 解压源代码 echo " ************************************* 解压源代码${dockerImageName}.tar.gz start *************************************" projectPath='/var/nodejs/' # 需要单独给用户赋目录/var/nodejs/的权限 sudo chown ubuntu /var/nodejs/ sudo mkdir -p ${projectPath}${projectName} || true \ && cd ${projectPath}${projectName} \ && sudo rm -rf * # 删除里面的数据 sudo tar -zxf ../${dockerImageName}.tar.gz -C ./ \ && sudo rm ../${dockerImageName}.tar.gz # 删除发布过来的包 echo " ************************************* 解压源代码${dockerImageName}.tar.gz finish *************************************" # step2 构建docker镜像 echo " ************************************* 构建docker镜像${dockerImageName} start *************************************" sudo docker build -t ${dockerImageName} --force-rm . echo ' ************************************* 构建docker镜像 finish *************************************' # step3 重启容器 echo "************************************* 使用镜像${dockerImageName}启动容器${projectName} start *************************************" # 错误日志统一存放在/var/nodejs/logs/${projectName} sudo mkdir -p /var/nodejs/logs/${projectName} || true \ && sudo docker stop ${projectName} || true \ && sudo docker rm ${projectName} || true \ && sudo docker run -d --net=host --name ${projectName} -v /var/nodejs/logs/${projectName}:/var/nodejs/${projectName}/logs ${dockerImageName} echo "************************************* 使用镜像${dockerImageName}启动容器${projectName} finish *************************************" echo '************************************************ 查看docker容器情况: ************************************************ ' sudo docker ps -a echo '************************************************ 查看docker容器情况: ************************************************ '
-
Если проект необходимо собрать в контейнере, начальное время сборки обычно относительно велико, поэтому вы можете установить «Время ожидания выполнения» в дополнительных настройках немного больше.
-
построить-выполнить команду оболочки:
#!/usr/bin/env sh projectName="${JOB_NAME}" dockerImageName=${projectName}-${BUILD_TIMESTAMP} echo '*********************************** 准备打包从Github仓库拉取的代码...*********************************************' echo "**********${WORKSPACE}**********" tar --exclude=node_modules --exclude=.git --exclude='*.tar.gz' -vzcf /tmp/${dockerImageName}.tar.gz -C ${WORKSPACE} . \ && mv /tmp/${dockerImageName}.tar.gz ${WORKSPACE} \ && echo '*********************************** 打包成功 *********************************************' \ && echo '************************************** 准备发送至服务器... **********************************************'
-
постмонтажные операции,Руководство по настройке уведомлений Dinging
-
-
После завершения настройки задачи проекта нажмите Сохранить.
-
Вернитесь также к деталям задачи, нажмите «Построить с параметрами», выберите ветку, нажмите «Начать сборку»:
-
В списке истории сборки щелкните последнюю запись сборки, а затем нажмите «Консольный вывод», чтобы просмотреть журнал сборки:Окончательный вывод журнала: Завершено: УСПЕХ, успешно. в
Dingding будет уведомлен, когда он будет построен.
Что делать, если возникла проблема и нужно откатить версию?
Мы можем создать новую задачу для отката версии:
-
Вернитесь на домашнюю страницу, нажмите «Создать» и дайте ей имя, например: newblog-rollback.
-
Нажмите newblog-rollback в списке, чтобы ввести сведения о задаче, нажмите «Настроить», чтобы перейти на страницу конфигурации: Добавлено: (скрипты оболочки все впроектв каталоге развертывания)
-
Исполнительная команда:
#!/usr/bin/env sh trim() { trimmed=$1 trimmed=${trimmed%% } trimmed=${trimmed## } echo "$trimmed" } # projectName=$(trim "${container_name}") projectName="newblog" dockerImageName=$(trim "${image_name}") echo "******************************************* 回退到镜像${image_name} ,并启动容器${container_name} **************** *******************************" sudo mkdir -p /var/nodejs/logs/${projectName} || true \ && sudo docker stop ${projectName} || true \ && sudo docker rm ${projectName} || true \ && sudo docker run -d --net=host --name ${projectName} -v /var/nodejs/logs/${projectName}:/var/nodejs/${projectName}/logs ${dockerImageName} echo "************************************* 使用镜像${dockerImageName}启动容器${projectName} finish *************************************"
-
-
Тестовая версия откатывается. Во-первых, вам нужно знать, на какую версию вы хотите откатиться. Скопируйте имя зеркала, которое вы хотите откатить, в список задач нового блога: Окончательный вывод журнала: Завершено: УСПЕХ, успешно.
Конечный результат:http://140.143.0.171:8080
【Ссылаться на】:
===🧐🧐Недостаточно в тексте, прошу исправить🤪🤪 ===.
=== Контента немного больше, самоощущение не очень хорошее, но я не знаю, как оптимизировать, приветствуются хорошие предложения ===