[A Cloud Guru, Linux Academy] Внедрение полного конвейера CI/CD [RUS, 2020]


05. Непрерывная доставка


Стартую Vagrant с 2 виртуалками как здесь.


Создаю пользователя “deploy”. И убеждаюсь, что могу подключиться по SSH данным пользователем с хоста, где установлен Jenkins.


Controller и Node

Создаю пользователя “deploy”

$ sudo su  -
# adduser --disabled-password --gecos "" deploy
# usermod -aG sudo deploy
# passwd deploy

# sed -i "s/.*PasswordAuthentication.*/PasswordAuthentication yes/g" /etc/ssh/sshd_config
# service sshd reload


Не спрашивать sudo пароль:


$ sudo su -

# vi /etc/sudoers


%sudo   ALL=(ALL:ALL) ALL

меняю на:

#%sudo   ALL=(ALL:ALL) ALL
%sudo   ALL=(ALL:ALL) NOPASSWD:ALL


Убеждаюсь, что могу подключиться по SSH


Запускаю приложение на серверах

$ sudo mkdir -p /opt/train-schedule/
$ cd /opt/train-schedule/
$ sudo git clone https://github.com/linuxacademy/cicd-pipeline-train-schedule-cd .


Устанавливаю Node

$ sudo apt install -y nodejs npm
$ sudo apt install -y unzip


$ cd /opt/train-schedule/
$ sudo npm install
$ sudo npm start


http://192.168.0.11:3000/ OK


Создаем сервис systemctl


$ sudo vi /etc/systemd/system/train-schedule.service


[Unit]
Description=nodejs-app
After=network.target

[Service]
Environment=NODE_PORT=3000
Type=simple
User=ubuntu
WorkingDirectory=/opt/train-schedule
ExecStart=/usr/bin/nodejs bin/www
Restart=on-failure

[Install]
WantedBy=multi-user.target


$ sudo systemctl enable train-schedule.service
$ sudo systemctl start train-schedule.service
$ sudo systemctl status train-schedule.service


// Выгрузить если что-то пошло не так
// # systemctl stop train-schedule.service
// # systemctl disable train-schedule.service


http://192.168.0.11:3000/ OK


$ sudo chown -R deploy /opt/train-schedule/


Нужно, чтобы отрабатывала:

$ sudo /usr/bin/systemctl stop train-schedule && rm -rf /opt/train-schedule/* && unzip /tmp/trainSchedule.zip -d /opt/train-schedule && sudo /usr/bin/systemctl start train-schedule


20. Развертывание с Jenkins Pipelines - Часть 1

Jenkins

Manage Jenkins -> Manage Plugins -> Available

  • Publish Over SSH


Jenkins

Manage Jenkins -> Configure System

Publish over SSH

SSH Servers -> Add

Server1

Name: staging
Nostname: 192.168.0.11

Username:
Remote Directory: /

Server2

Name: production
Nostname: 192.168.0.12

Username:
Remote Directory: /

SAVE


Jenkins -> Manage Jenkins -> Manage Credentials

Stores scoped to Jenkins -> Jenkins

Global credentials (unrestricted) -> Add Credentials

Username: deploy Password: deploy ID: webserver_login Description: Webserver Login

OK


Jenkins -> New Item

Name: train-schedule Multibranch Pipeline

Branch Sources -> Github -> Add Jenkins

Kind: Username with password

Username: GithubUserName Password: GithubAPIKey ID: github_api_key Description: GitHub API Key

Add


Gredentials: GitHub API Key

Repostitory HTTPS URL: cicd-pipeline-train-schedule-cd

Validate

Save


На этом шаге только сборка. Нет доставки.


20. Развертывание с Jenkins Pipelines - Часть 2


Заменить содержимое Jenkinsfile на

https://github.com/linuxacademy/cicd-pipeline-train-schedule-cd/blob/example-solution/Jenkinsfile


Меняю текст

https://github.com/webmak1/cicd-pipeline-train-schedule-cd/blob/master/views/index.jade


Запускаю jenkins job.

Все ок.