задний план
Build great things at any scale
The leading open source automation server, Jenkins provides hundreds of plugins to support building, deploying and automating any project.
Это сервер автоматического развертывания с открытым исходным кодом, написанный на Java для постоянной интеграции.
Конкретные шаги
- Проекты и удаленные репозитории
- Отправьте последний код в удаленный репозиторий
- Удаленные репозитории и Jenkins
- Регулярно получайте последний завершенный проект на удаленном складе и загружайте его на локальный
- Дженкинс с удаленным сервером
- Загрузить на удаленный сервер через jenkins
Установить
добавить его первымDebian
package, затем обновите репозиторий и, наконец, используйте репозиторийapt-get
Установитьjenkins
.
Установите среду выполнения
установить jdk
sudo apt-get install openjdk-8-jdk
Установка завершается следующим образом
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/appletviewer to provide /usr/bin/appletviewer (appletviewer) in auto mode
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/bin/jconsole to provide /usr/bin/jconsole (jconsole) in auto mode
Processing triggers for libc-bin (2.23-0ubuntu10) ...
Processing triggers for systemd (229-4ubuntu21.2) ...
Processing triggers for ureadahead (0.100.0-19) ...
Processing triggers for ca-certificates (20170717~16.04.1) ...
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
done.
Добавьте ключ репозитория в систему
wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
появлятьсяok
, успешно добавлено
Адрес репозитория пакетов Debian добавлен на серверsources.list
echo deb http://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list
Добавлено успешно следующим образом
deb http://pkg.jenkins.io/debian-stable binary/
обновить репозиторий
sudo apt-get update
Обновление прошло успешно следующим образом
Ign:17 http://pkg.jenkins.io/debian-stable binary/ InRelease
Get:18 http://pkg.jenkins.io/debian-stable binary/ Release [2042 B]
Get:19 http://pkg.jenkins.io/debian-stable binary/ Release.gpg [181 B]
Ign:20 https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.0 InRelease
Hit:21 https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.0 Release
Get:23 http://pkg.jenkins.io/debian-stable binary/ Packages [14.7 kB]
Fetched 6813 kB in 3s (2187 kB/s)
Reading package lists... Done
установить Дженкинс
sudo apt-get install jenkins
Установка прошла успешно следующим образом
perl: warning: Falling back to a fallback locale ("en_US.UTF-8").
locale: Cannot set LC_ALL to default locale: No such file or directory
Selecting previously unselected package daemon.
(Reading database ... 136881 files and directories currently installed.)
Preparing to unpack .../daemon_0.6.4-1_amd64.deb ...
Unpacking daemon (0.6.4-1) ...
Selecting previously unselected package jenkins.
Preparing to unpack .../jenkins_2.164.2_all.deb ...
Unpacking jenkins (2.164.2) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for systemd (229-4ubuntu21.2) ...
Processing triggers for ureadahead (0.100.0-19) ...
Setting up daemon (0.6.4-1) ...
Setting up jenkins (2.164.2) ...
Processing triggers for systemd (229-4ubuntu21.2) ...
Processing triggers for ureadahead (0.100.0-19) ...
Изменить порт по умолчанию 8080
- Исправлять
/etc/init.d/jenkins
сценарий
sudo vim /etc/init.d/jenkins
Исправлять$HTTP_PORT
Изменить на нужный порт
# Verify that the jenkins port is not already in use, winstone does not exit
# even for BindException
check_tcp_port "http" "$HTTP_PORT" "1314" "$HTTP_HOST" "0.0.0.0" || return 2
# If the var MAXOPENFILES is enabled in /etc/default/jenkins then set the max open files to the
# proper value
- Исправлять
/etc/default/jenkins
документ
sudo vim /etc/default/jenkins
ИсправлятьHTTP_PORT
Изменить на нужный порт
ration, build records,
# that sort of things.
#
# If commented out, the value from the OS is inherited, which is normally 022 (as of Ubuntu 12.04,
# by default umask comes from pam_umask(8) and /etc/login.defs
# UMASK=027
# port for HTTP connector (default 8080; disable with -1)
HTTP_PORT=1314
# servlet context, important if you want to use apache proxying
PREFIX=/$NAME
# arguments to pass to jenkins.
# --javahome=$JAVA_HOME
# --httpListenAddress=$HTTP_HOST (default 0.0.0.0)
# --httpPort=$HTTP_PORT (default 8080; disable with -1)
# --httpsPort=$HTTP_PORT
# --argumentsRealm.passwd.$ADMIN_USER=[password]
- перезагрузить сервер
sudo systemctl restart jenkins
После изменения баг появляется после перезагрузки
Warning: jenkins.service changed on disk. Run 'systemctl daemon-reload' to reload units.
Решение:
systemctl daemon-reload
systemctl start jenkins
Новый порт 1314
начать Дженкинс
sudo systemctl start jenkins
- Используйте следующую команду для проверки или прямого доступа к ip+port или 0.0.0.0:8080
jenkins
sudo systemctl status jenkins
- Успех заключается в следующем:
● jenkins.service - LSB: Start Jenkins at boot time
Loaded: loaded (/etc/init.d/jenkins; bad; vendor preset: enabled)
Active: active (exited) since 四 2019-04-18 09:00:28 CST; 8h ago
Docs: man:systemd-sysv-generator(8)
Process: 1136 ExecStart=/etc/init.d/jenkins start (code=exited, status=0/SUCCE
4月 18 09:00:24 devue-System-Product-Name systemd[1]: Starting LSB: Start Jenkin
4月 18 09:00:27 devue-System-Product-Name jenkins[1136]: Correct java version fo
4月 18 09:00:27 devue-System-Product-Name jenkins[1136]: * Starting Jenkins Aut
4月 18 09:00:27 devue-System-Product-Name su[1511]: Successful su for jenkins by
4月 18 09:00:27 devue-System-Product-Name su[1511]: + ??? root:jenkins
4月 18 09:00:27 devue-System-Product-Name su[1511]: pam_unix(su:session): sessio
4月 18 09:00:28 devue-System-Product-Name jenkins[1136]: ...done.
4月 18 09:00:28 devue-System-Product-Name systemd[1]: Started LSB: Start Jenkins
- Порт jenkins по умолчанию 8080, вам нужно разблокировать jenkins
- Введите скопированный пароль и нажмите «Продолжить».
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
- Нажмите, чтобы установить предлагаемые плагины
- Запустите установку, это займет много времени
- После завершения установки вам будет предложено настроить пользователя с правами администратора. Есть возможность пропустить, но пароль неизвестен. А еще лучше создайте пользователя.
- После создания пользователя войдите в конфигурацию экземпляра
- Добро пожаловать на панель Дженкинса, начинаем наше шоу
Дженкинс не может войти или пустая страница
решение:
vim /var/lib/jenkins/config.xml
Добавить после информации о версии
<authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/>
<securityRealm class="hudson.security.SecurityRealm$None"/>
Просто перезапустите сервер
sudo systemctl restart jenkins
подключиться к гитхабу
Операция на jenkin: установить соответствующие плагины
- Установите плагин «Publish Over SSH», плагин для подключения к удаленному серверу.
На фото ниже после установки
- установить плагин'GitHub Integration Plugin', плагин для интеграции с GitHub
Действие на github: настроить веб-хук
- Нажмите в проекте github
Settings
Вкладка- нажмите
webhook
Пункт меню- Добавить к
webhook
- Добавить к
- нажмите
- Payload URL
серединаhttp://
+ip и номер порта развернуты jenkins+/github-webhook/
- Content type
выберитеapplication/json
- Which events would you like to trigger this webhook?
выберитеjust the push event
- выберитеActive
- нажмитеUpdate webhook
Дженкинс загружает код vue на github и запускает его локально.
- Новое задание
- случайное название задачи
- выберите
构建一个自由风格的软件项目
,наконец确定
- Привязать проект github
- Ссылка на скачивание проекта привязки
- выберите
Git
- существует
Repositories
серединаRepository URL
Заполните ссылку на скачивание проекта (http) -
Credentials
добавить идентификационную информацию- выбрать по типу
Username with password
- Имя пользователя и пароль — это учетная запись и пароль github, и, наконец,
确定
- выбрать по типу
-
Branches to build
Выберите ветку для развертывания (*/название ветки) -
триггер сборки
- выберите
GitHub hook trigger for GITScm polling
- выберите
- Построить
- выполнить оболочку
- Заказ
cd /var/lib/jenkins/workspace/vue npm install chromedriver --chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedriver npm install npm run dev
- Команда не может отсутствовать, иначе пакет будет неполным
npm install chromedriver --chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedriver
- выполнить оболочку
- спасти
задача создана,jenkins
ты закончил
Дженкинс загружает код vue на github и запускает его на удаленном сервере.
- подключиться к удаленному серверу
- Управление системой -> Настройки системы -> Опубликовать через SSH
- Парольная фраза: введите пароль jenkins
- Ключ: закрытый ключ Дженкинса
- Имя: IP-имя сервера
- Имя хоста: ip сервера
- Имя пользователя: имя пользователя на сервере
- Удаленный каталог: адрес проекта
- нажмите
Test Configuration
,появлятьсяsuccess
, то соединение успешно
- Управление системой -> Настройки системы -> Опубликовать через SSH
- удаленный сервер
- установить открытый ключ
Получить открытые и закрытые ключи
su jenkins
ssh-keygen -t rsa
Определить, следует ли генерировать открытые и закрытые ключи
ls -l /var/lib/jenkins/.ssh/
jenkins@devue-System-Product-Name:/home/devue$ ls -l /var/lib/jenkins/.ssh/
total 8
-rw------- 1 jenkins jenkins 1675 4月 19 16:26 id_rsa
-rw-r--r-- 1 jenkins jenkins 415 4月 19 16:26 id_rsa.pub
Скопируйте открытый ключ
cd /var/lib/jenkins/.ssh/
cat id_rsa.pub >> authorized_keys
chmod 600 authorized_keys
Поместите открытый ключ на удаленный сервер author_keys
vim ~/.ssh/authorized_keys
- Построить сейчас
передача не удаласьЗастрял здесь, большой парень, который проходил мимо, дал мне несколько советов, спасибо
подключить гитлаб
управление исходным кодом
Repository URL
Требуется HTTP-запрос
Построить
УстановитьGitlab Hook
Если не установлен
Gitlab Hook
и добавил на gitlabwebhook
Если это так, он сообщит об ошибке
- Боковая панель проекта gitlab
Settings-Integrations
Увеличиватьwebhook
- Добавить к
Gitlab Hook
плагин
jenkins polls gitlab (должен быть администратором)
Когда jenkins хочет выполнить следующую задачу сборки, он должен дождаться завершения предыдущей задачи (задача параллельного выполнения не проверяется)
из-заnpm run dev
, поэтому желаемого эффекта при построении по времени не получено.
Требования: процесс технического обслуживания, регулярное выполнение
Действуйте следующим образом:
-
плюс pm2 построить проект,запись pm2
-
Триггеры сборки, выбор между сборкой по времени и опросом SCM
- Оболочка выполнения в сборке
cd /var/lib/jenkins/workspace/ceres-cms-vue
npm install chromedriver --chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedriver
npm install
npm run build
npm run pm2
pm2 list
Автоматическая сборка обновления кода склада
- Не проверять сборку по времени и опрашивать SCM
- чек об оплате
GitHub hook trigger for GITScm polling
Таким образом, ваши jenkins могут быть созданы автоматически с вашим кодом.
голосование
- Запланированные сборки: своевременная сборка с последним кодом или без него.
- Опрос SCM: сборка при каждом обновлении кода
-
Описание синтаксиса сборки:
- Первый формат: * * * * * (пять звезд)
Опции | иметь в виду |
---|---|
Первая * указывает на минуты | Значение 0~59 |
Вторая * указывает на час | Значение 0~23 |
Третья * указывает на день месяца | Значение 1~31 |
Четвертая * указывает на месяц | Значение 1~12 |
Пятая * указывает на день недели | Значение варьируется от 0 до 7, где 0 и 7 представляют оба воскресенья. |
- Пример использования (без добавления H, как моментом ранее):
Опции | иметь в виду |
---|---|
Строить каждую 1 минуту | H/1 * * * * |
Строить каждый 1 час | H H/1 * * * |
Сборка 1-го числа каждого месяца | H H 1 * * |
- Использование временного построения и опроса SCM не противоречат друг другу, их совмещение необходимо разумно настроить в соответствии с проектной ситуацией;
тестовое задание
- Локальный push-код на github
- нажмите
立即构建
- статус выполнения сборки
- нажмите
#13
, введите детали проекта
- консольный вывод
执行中控制台输出
Started by user unknown or anonymous
Started by user unknown or anonymous
Started by user unknown or anonymous
Building in workspace /var/lib/jenkins/workspace/vue
using credential 12dc8386-52e8-4c57-b667-bd8d263626cd
> git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
> git config remote.origin.url https://github.com/qiufeihong2018/vuepress-app.git # timeout=10
Fetching upstream changes from https://github.com/qiufeihong2018/vuepress-app.git
> git --version # timeout=10
using GIT_ASKPASS to set credentials
> git fetch --tags --progress https://github.com/qiufeihong2018/vuepress-app.git +refs/heads/*:refs/remotes/origin/*
> git rev-parse refs/remotes/origin/master^{commit} # timeout=10
> git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
Checking out Revision ab0c6b6de9b810dcd9fd107c6329d1e782054976 (refs/remotes/origin/master)
> git config core.sparsecheckout # timeout=10
> git checkout -f ab0c6b6de9b810dcd9fd107c6329d1e782054976
Commit message: "Merge branch 'master' of github.com:qiufeihong2018/vuepress-app"
> git rev-list --no-walk 9b7e2475ffaef9a60cc38cec1c660d0f9d8dc490 # timeout=10
[vue] $ /bin/sh -xe /tmp/jenkins5471132310334499324.sh
+ cd /var/lib/jenkins/workspace/vue
+ npm install chromedriver --chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedriver
> chromedriver@73.0.0 install /var/lib/jenkins/workspace/vue/node_modules/chromedriver
> node install.js
ChromeDriver binary exists. Validating...
ChromeDriver 73.0.3683.20 (8e2b610813e167eee3619ac4ce6e42e3ec622017)
ChromeDriver is already available at '/tmp/73.0.3683.20/chromedriver/chromedriver'.
Copying to target path /var/lib/jenkins/workspace/vue/node_modules/chromedriver/lib/chromedriver
Fixing file permissions
Done. ChromeDriver binary available at /var/lib/jenkins/workspace/vue/node_modules/chromedriver/lib/chromedriver/chromedriver
npm WARN vuepress-app@1.0.0 No repository field.
npm WARN vuepress-app@1.0.0 scripts['server'] should probably be scripts['start'].
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.7 (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.7: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
+ chromedriver@73.0.0
updated 1 package and audited 14738 packages in 13.642s
found 15 vulnerabilities (1 low, 7 moderate, 7 high)
run `npm audit fix` to fix them, or `npm audit` for details
+ npm install
npm WARN vuepress-app@1.0.0 No repository field.
npm WARN vuepress-app@1.0.0 scripts['server'] should probably be scripts['start'].
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.7 (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.7: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
audited 14738 packages in 8.37s
found 15 vulnerabilities (1 low, 7 moderate, 7 high)
run `npm audit fix` to fix them, or `npm audit` for details
+ npm run dev
> vuepress-app@1.0.0 dev /var/lib/jenkins/workspace/vue
> vuepress dev docs
WAIT Extracting site metadata...
<button @click.ctrl="onClick">A</button>
<button @click.ctrl.exact="onCtrlClick">A</button>
<button @click.exact="onClick">A</button>
TIP override.styl has been split into 2 APIs, we recommend you upgrade to continue.
See: https://v0.vuepress.vuejs.org/default-theme-config/#simple-css-override
[2:52:53 PM] Compiling Client
[2:52:56 PM] Compiled Client in 4s
c
DONE [14:52:56] Build 854bb5 finished in 3536 ms!
> VuePress dev server listening at http://localhost:7777/
c[2:52:57 PM] Compiling Client
[2:52:57 PM] Compiled Client in 204ms
c
DONE [14:52:57] Build 056d13 finished in 208 ms! (http://localhost:7777/)
- Проект запущен успешно
- После отправки модификации один клик
立即构建
, вы можете запустить последний представленный код
Решить проблему автоматического уничтожения порожденного процесса после завершения сборки.
- Исправлять
BUILD_ID
По умолчанию jenkins убивает порожденные процессы, запущенные командами оболочки, во время процесса сборки после завершения сборки. Дженкинс в соответствии сBUILD_ID
Определите, является ли процесс производным процессом процесса сборки, поэтому изменитеBUILD_ID
После этого jenkins не может определить, является ли это производным процессом, поэтому этот процесс может продолжать работать в фоновом режиме.
OLD_BUILD_ID=$BUILD_ID
echo $OLD_BUILD_ID
BUILD_ID=dontKillMe
cd /var/lib/jenkins/workspace/ceres-cms-vue
npm install chromedriver --chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedriver
npm install
npm run build
npm run pm2
pm2 list
BUILD_ID=$OLD_BUILD_ID
echo $BUILD_ID
Убейте процесс появления, который меняет идентификатор
netstat -lntp
kill -g {id}
использованная литература
Как установить Дженкинс на Ubuntu 16.04
Метод удаления Jenkins (Windows/Linux/MacOS)
Дженкинс забыл пароль учетной записи администратора
Научит вас создавать среду непрерывной интеграции Jenkins+Github.
Integrate with GitHub: build after each commit (Get started with Jenkins, part 13)
Практические заметки: Jenkins создает мощный рабочий процесс автоматизации интерфейса.
Научит вас использовать Vue, GitLab, Jenkins, Nginx для автоматической упаковки и выпуска онлайн
Автоматическое развертывание внешнего интерфейса Jenkins + github
Jenkins автоматически создает проект vue, а затем публикует его на удаленном сервере.
Jenkins автоматически публикует интерфейсный код VUE (режим конфигурации)
Проблемы, возникающие при публикации конфигурации jenkins через ssh
Jenkins+git+webhook автоматически запускает задачи развертывания и тестирования.
Инструкции по сборке и опросу SCM по времени Jenkins
Глава 41 Микросервисный CICD (3) — jenkins + gitlab + webhooks + publish-over-ssh (1)
jenkins решает проблему автоматического уничтожения порожденного процесса после завершения сборки.
Эта статья была впервые опубликована на паблике "Front-end Keep", прошу обратить внимание.
Наконец, я надеюсь, что все должны поставить палец вверх.
Следите за моим блогом:адрес блога