Используйте Travis CI для создания крупных интерфейсов с непрерывной интеграцией и автоматизированным развертыванием.

внешний интерфейс непрерывная интеграция
Используйте Travis CI для создания крупных интерфейсов с непрерывной интеграцией и автоматизированным развертыванием.

Давно использую Travis CI для непрерывной интеграции.Он хоть и находится только на стадии zhuang bi, но более-менее гарантирует качество подачи кода. Недавно я пишу книгу из серии "Полный анализ JavaScript API", и мне нужно часто деплоить статьи на сервер. Ручной деплой действительно раздражает, поэтому я просто потратил день на изучение автоматического деплоя. Этот пост представляет собой краткий обзор непрерывной интеграции и автоматического развертывания Travis CI для сообщества.

прелюдия

В настоящее время у Travis CI есть два веб-сайта: travis-ci.com и travis-ci.org. Первый используется для корпоративных и частных репозиториев, а второй — для общедоступных репозиториев с открытым исходным кодом. Фактически, бесплатный план также может использовать travis-ci.com, но приоритет очень низкий, автоматизация выполняется каждые два часа, поэтому мы используем travis-ci.org.

первый открытыйОфициальный сайт Travis CI, и войдите под своей учетной записью GitHub.После авторизации Travis CI синхронизирует информацию о вашем репозитории. Затем авторизуйте проекты, которые необходимо автоматизировать, в Travis CI.

授权仓库信息

Лучше всего иметь сервер Linux, у меня Cent OS 7.6.x 64bit.

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

设置页面

Непрерывная интеграция

Чтобы непрерывная интеграция работала именно так, мы сначала вырезаем ветку разработки на master и ветку feature/ci на develop.

Затем мы используем Jest для написания нескольких тестовых случаев.Обратите внимание, что если в проекте нет тестового сценария и.travis.ymlфайл содержитyarn test,автоматизациядолженсообщить об ошибке. Я не буду вдаваться в подробности о Jest, просто опубликую несколько примеров кода.

import * as utils from '../utils/util';

test('should get right date', () => {
  expect(utils.formatJSONDate('2019-03-10T04:15:40.629Z')).toBe(
    '2019-03-10 12:15:40',
  );
});

test('should get right string', () => {
  expect(utils.upperFirstLetter('AFTERNOON')).toBe('Afternoon');
  expect(utils.upperFirstLetter('YANCEY_LEO')).toBe('Yancey Leo');
});

Затем мы создаем новый файл в корневом каталоге проекта..travis.yml, и скопируйте приведенный ниже код.

language: node_js
node_js:
  - 8
branchs:
  only:
    - master
cache:
  directories:
    - node_modules
install:
  - yarn install
scripts:
  - yarn test
  - yarn build

Кратко поясню: проект использует Node.js 8.x и работает только наmasterСрабатывает при изменении веткиАвтоматическое развертывание(Обычная отправка и PR будут проходить непрерывную интеграцию в обычном режиме), затем кешировать node_modules (вы это знаете) и, наконец, устанавливать зависимости, запускать тестовые сценарии и развертывать в песочнице.

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

Отправьте код и запрос на извлечение в ветку разработки. Во время этого процесса мы запускаем push-уведомления и PR, поэтому будут запущены два CI. После того, как оба успешно запущены, мы можем безопасно объединиться с веткой разработки. (Еще здесь я делал проверку качества кода, если интересно, можете ткнутьCodacy)

跑 CI

Наконец, когда мы возвращаемся на официальный сайт Travis CI, мы видим полный процесс сборки: установка зависимостей -> тестирование -> развертывание в песочнице.

CI 结果

Непрерывное развертывание

Создайте пару rsa и дайте разрешение

Во-первых, войдите в свой сервер, вообще говоря, мы не работаем непосредственно в корне, поэтому новые пользователи Caddy здесь. В частности, как новый пользователь Linux ваш собственный Google.

Далее заходим в ~/.ssh и смотрим есть ли пара id_rsa и id_rsa.pub, если нет то используемssh-keygenгенерировать.

Дайте 700 разрешений для папки .ssh и 600 разрешений для файлов в .ssh. (Посмотрите на картинку ниже, возможно, у вас пока нет трех файлов author_keys, known_host и config в вашей папке, о чем мы поговорим позже.)

$ sudo chmod 700 ~/.ssh/

$ sudo chmod 600 ~/.ssh/*

给予 .ssh 权限

Добавьте сгенерированный открытый ключ в список доверенных

Войти.sshВ папке выполните следующую команду, вы увидите, что открытый ключ добавлен в список доверенных.

$ cat id_rsa.pub >> authorized_keys

$ cat authorized_keys

Тест входа в систему

существует.sshСоздайте файл в каталогеconfig, введите следующий код и сохраните.

Host test
HostName 当前服务器的IP
User 当前用户名
IdentitiesOnly yes
IdentityFile ~/.ssh/id_rsa

потому чтоauthorized_keysа такжеconfigФайлы все новые, им не давали 600 разрешений, так что перезапустите ихsudo chmod 600 ~/.ssh/*.

Затем мы входимssh test, не случайно будет повторный вход в ssh. Если ваш открытый ключ никогда не использовался, вам будет предложеноAre you sure you want to continue connecting (yes/no)?, после ввода да, он снова войдет в систему в обычном режиме, а в.sshПапка также создастknown_hostsдокумент.

Установить Руби

Поскольку клиент Travis написан на Ruby, мы должны сначала установить Ruby.

Сначала установите необходимые зависимости:

$ yum install gcc-c++ patch readline readline-devel zlib zlib-devel \
   libyaml-devel libffi-devel openssl-devel make \
   bzip2 autoconf automake libtool bison iconv-devel sqlite-devel

Затем установите RVM и загрузите среду RVM. RVM — это инструмент управления версиями для Ruby, похожий на Node NVM.

$ gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3

$ \curl -sSL https://get.rvm.io | bash -s stable

# 载入 rvm 环境
$ source ~/.rvm/scripts/rvm

После установки введитеrvm -vПроверьте, есть ли rvm 1.29.1 (последняя) от Michal Papis, Piotr Kuczynski, Wayne E. Seguin [rvm.io/], чтобы доказать, что установка прошла успешно.

Наконец, установите Ruby. Здесь выберите версию v2.4.1. Установка займет некоторое время. Не забудьте установить эту версию по умолчанию после завершения.

$ rvm install 2.4.1

$ rvm 2.4.1 --default

сделай этоruby -vа такжеgem -v, если он похож на следующий рисунок, это доказывает, что установка прошла успешно.

安装 ruby 成功

Установить клиент Travis

Выполните приведенную ниже команду, чтобы установить клиент Travis.

$ gem install travis

Выполнить после завершения установкиtravis, это позволит вам установить соответствующую оболочку, просто введите yes.

安装 shell

Настроить вход без пароля

Клонируйте свой проект, перейдите в каталог проекта и войдите в свою учетную запись GitHub.

$ travis login --auto

登录 GitHub

Выполните следующее предложение, оно будет использовать закрытый ключ сервера для шифрования в файл с именемid_rsa.encЭтот файл используется travis для входа в учетные данные вашего сервера, чтобы достичь цели без пароля.

$ travis encrypt-file ~/.ssh/id_rsa --add

生成 id_rsa.enc 文件

давайте исполнимll, вы можете видеть, что в корневом каталоге есть еще одинid_rsa.encфайл иcat .travis.yml, нашел ещеbefore_install.

Для лучшей организации кода создаем новую папку в корневом каталоге проекта.travis,Потомid_rsa.encПоложите его внутрь.

添加了 before_install 钩子

Настройте хук after_success

Прежде чем писать этот раздел, давайте взглянем на жизненный цикл Travis:

  1. before_install перед установкой зависимостей
  2. установить при установке зависимостей
  3. before_script перед выполнением скрипта
  4. скрипт, когда скрипт выполняется
  5. after_success или after_failure после успешного выполнения скрипта (сбой)
  6. before_deploy перед развертыванием
  7. развертывание при развертывании
  8. after_deploy после развертывания
  9. after_script после выполнения скрипта

следовательноafter_successМожет использоваться для выполнения сценариев, связанных с развертыванием, после успешного прохождения тестовых сценариев. Конечно, вы можете использовать хуки, связанные с развертыванием, для получения более подробной информации, здесь это не так уж сложно.

Открыть.travis.ymlФайл, непосредственно загрузите весь код.

language: node_js
sudo: true
node_js:
  - 8
branchs:
  only:
    - master
# 这里填写服务器的ip,若端口号不是22,后面要注明端口号
addons:
  ssh_known_hosts:
    - 你的服务器IP
cache:
  directories:
    - node_modules
before_install:
  # 因为我们把 id_rsa.enc 移到了.travis 文件夹下,所以 -in 后面要改成 .travis/id_rsa.enc
  # 其次,-out 后面自动生成的是 ~\/.ssh/id_rsa,要把 \ 去掉,否则会编译失败
  - openssl aes-256-cbc -K $encrypted_XXXXXXXXXXXX_key -iv $encrypted_XXXXXXXXXXXX_iv -in .travis/id_rsa.enc -out ~/.ssh/id_rsa -d
  # 开启 ssh-agent,即允许使用 ssh 命令
  - eval "$(ssh-agent -s)"
  # 给予 id_rsa 文件权限,避免警告
  - chmod 600 ~/.ssh/id_rsa
  # 将私钥添加到 ssh
  - ssh-add ~/.ssh/id_rsa
install:
  - yarn install
scripts:
  - yarn test
  - yarn build
after_success:
  # 登录服务器,执行部署脚本,其实最好把后面一串写成 shell 文件
  - ssh caddy@你的服务器IP -o StrictHostKeyChecking=no 'cd /var/www/jsapi/JavaScript-APIs-Set && git pull && yarn install && yarn build'

Пройдите формальный процесс

На этом непрерывная интеграция и автоматическое развертывание Travis CI завершены, что, возможно, не является строгим, но в основном это та же идея. Ниже разберем процесс.

  1. Сначала мы модифицируем кусок кода в ветке feature/ci, отправляем ветку и пиаримся на разработку, которая будет запускать два CI. Когда оба ЭК запущены, мы можем безопасно объединить запрос на разработку ветки.

  2. Затем давайте разработаем PR для мастера, который будет запускать два ЭК (один для ветки разработки и один для теста, объединенного с мастером). Когда оба ЭК запущены, мы можем безопасно объединить запрос в ветку master.

  3. После мерж-реквеста запустится последний процесс, то есть автоматический деплой.После успешного деплоя онлайн-код будет обновлен.

добавить значок

Не забудьте добавить значок для создания прохождения файла readme.md.

badge

наконец

Не знаю, заметили ли вы, что Travis CI поддерживает ЛГБТ...

LGBT

Выше よろしく.

Ссылаться на

How to Encrypt/Decrypt SSH Keys for Deployment

Автоматизация тестирования Travis-CI и развертывание на собственном сервере CentOS

CentOS 7 использует rvm для установки ruby ​​для создания среды jekyll