Застрял в яме автоматического развертывания jenkins

Автоматизированная эксплуатация и техническое обслуживание
Застрял в яме автоматического развертывания jenkins

задний план

официальный сайт Дженкинса

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

Установить

добавить его первымDebianpackage, затем обновите репозиторий и, наконец, используйте репозиторий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:8080jenkins
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: настроить веб-хук

  • Нажмите в проекте githubSettingsВкладка
    • нажмите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, то соединение успешно

  • удаленный сервер
    • установить открытый ключ

Получить открытые и закрытые ключи

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Если это так, он сообщит об ошибке

  • Боковая панель проекта gitlabSettings-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 использует плагин publishover ssh для подключения к машине приложения, он сообщает о проблеме сбоя аутентификации сообщения.

Jenkins+git+webhook автоматически запускает задачи развертывания и тестирования.

Инструкции по сборке и опросу SCM по времени Jenkins

Глава 41 Микросервисный CICD (3) — jenkins + gitlab + webhooks + publish-over-ssh (1)

Разрешения конфигурации Jenkins неверны, что приводит к невозможности входа в систему или решению с пустой страницей

jenkins решает проблему автоматического уничтожения порожденного процесса после завершения сборки.

Эта статья была впервые опубликована на паблике "Front-end Keep", прошу обратить внимание.

Наконец, я надеюсь, что все должны поставить палец вверх.

Следите за моим блогом:адрес блога