Давно использую 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)
Наконец, когда мы возвращаемся на официальный сайт Travis 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
В папке выполните следующую команду, вы увидите, что открытый ключ добавлен в список доверенных.
$ 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
, если он похож на следующий рисунок, это доказывает, что установка прошла успешно.
Установить клиент Travis
Выполните приведенную ниже команду, чтобы установить клиент Travis.
$ gem install travis
Выполнить после завершения установкиtravis
, это позволит вам установить соответствующую оболочку, просто введите yes.
Настроить вход без пароля
Клонируйте свой проект, перейдите в каталог проекта и войдите в свою учетную запись GitHub.
$ travis login --auto
Выполните следующее предложение, оно будет использовать закрытый ключ сервера для шифрования в файл с именемid_rsa.enc
Этот файл используется travis для входа в учетные данные вашего сервера, чтобы достичь цели без пароля.
$ travis encrypt-file ~/.ssh/id_rsa --add
давайте исполнимll
, вы можете видеть, что в корневом каталоге есть еще одинid_rsa.enc
файл иcat .travis.yml
, нашел ещеbefore_install
.
Для лучшей организации кода создаем новую папку в корневом каталоге проекта.travis
,Потомid_rsa.enc
Положите его внутрь.
Настройте хук after_success
Прежде чем писать этот раздел, давайте взглянем на жизненный цикл Travis:
- before_install перед установкой зависимостей
- установить при установке зависимостей
- before_script перед выполнением скрипта
- скрипт, когда скрипт выполняется
- after_success или after_failure после успешного выполнения скрипта (сбой)
- before_deploy перед развертыванием
- развертывание при развертывании
- after_deploy после развертывания
- 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 завершены, что, возможно, не является строгим, но в основном это та же идея. Ниже разберем процесс.
-
Сначала мы модифицируем кусок кода в ветке feature/ci, отправляем ветку и пиаримся на разработку, которая будет запускать два CI. Когда оба ЭК запущены, мы можем безопасно объединить запрос на разработку ветки.
-
Затем давайте разработаем PR для мастера, который будет запускать два ЭК (один для ветки разработки и один для теста, объединенного с мастером). Когда оба ЭК запущены, мы можем безопасно объединить запрос в ветку master.
-
После мерж-реквеста запустится последний процесс, то есть автоматический деплой.После успешного деплоя онлайн-код будет обновлен.
добавить значок
Не забудьте добавить значок для создания прохождения файла readme.md.
наконец
Не знаю, заметили ли вы, что Travis CI поддерживает ЛГБТ...
Выше よろしく.
Ссылаться на
How to Encrypt/Decrypt SSH Keys for Deployment
Автоматизация тестирования Travis-CI и развертывание на собственном сервере CentOS
CentOS 7 использует rvm для установки ruby для создания среды jekyll