Как настроить Travis CI для использования связанных (локальных) пакетов? - PullRequest
0 голосов
/ 06 мая 2018

Я использую npm link myDependency в myPackage, чтобы я мог работать над обоими одновременно (вместо публикации myDependency после каждого изменения и последующего обновления myPackage для его проверки.)

Я хотел бы иметь возможность использовать Travis CI с myPackage, но, как и следовало ожидать (я действительно забыл, но это стало совершенно очевидно после попытки сборки): запустить npm install на Travis не удастся установить связанный пакет.

Итак, что я могу сделать? Я видел, как кто-то предложил использовать контейнер Docker, но это похоже на большую инфраструктуру, и у меня нет опыта работы с Docker. Другой вариант, о котором я подумал, - это добавить предустановочный скрипт для клонирования ветки dev myDependency repo в папку node_modules.

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

1 Ответ

0 голосов
/ 07 мая 2018

Я решил эту проблему, скопировав свои настройки разработки на Travis.

Ключом к решению этой проблемы является предоставление Трэвису способа доступа к GitHub. Для этого войдите в GitHub и перейдите на страницу токенов личного доступа.

Вы увидите форму с полем для имени вашего токена и разрешений, к которым вы хотите предоставить доступ. Введите имя, например «Travis CI Pull Repo», и выберите раздел «РЕПО». Ничего другого не нужно, поэтому нет необходимости предоставлять к ним доступ. Внизу страницы находится зеленая кнопка «Генерировать токен».

Вернувшись в редактор кода, создайте файл .travis.yml в корневом каталоге вашего проекта, если у вас его еще нет. На следующем шаге мы будем использовать RubyGem, поэтому, если у вас не установлены гемы Ruby, вам необходимо его скачать. Вы можете проверить, установлен ли он, запустив gem -v в терминале.

Если вы это сделаете, запустите в терминале следующее, чтобы установить Travis RubyGem:

gem install travis

Далее, в терминале, убедитесь, что вы работаете в корневом каталоге вашего проекта, и используйте гем Travis, чтобы добавить токен доступа в ваш файл .travis.yml:

travis encrypt GH_TOKEN="token-from-github-goes-here" --add

Если вы добились успеха, ваш .travis.yml файл должен содержать несколько случайных текстов с сохраненным зашифрованным токеном:

env:
  global:
    secure: "lots-of-seemingly-random-characters"

Вот и все! Теперь Трэвис сможет вытащить (и подтолкнуть, если это то, что вам нужно) в ваш репозиторий GitHub.

Очевидно, ваш файл .travis.yml может сильно отличаться от моего, но в его основе я настроил .travis.yml следующим образом:

language: node_js
node_js:
- '6'
cache:
  directories:
    - node_modules
install:
- npm install
script:
- npm run lint
- npm run test
env:
  global:
    secure: "lots-of-seemingly-random-characters"

Чтобы добавить клонирование и связывание зависимости, добавьте раздел before_install со следующими командами:

before_install:
- git config credential.helper "store --file=.git/credentials"
- echo "https://${GH_TOKEN}:@github.com" > .git/credentials
- cd ..
- git clone https://github.com/my-name/my-dependency.git my-dependency
- cd my-dependency
- npm install
- npm link
- cd ../my-main-project

Что это на самом деле делает?

  1. Мы настроили Git для использования нашего сохраненного токена доступа.
  2. Мы поднимаемся на один каталог вверх и клонируем хранилище в новую папку с тем же именем, что и хранилище.
  3. Заходим в хранилище и устанавливаем его зависимости. Мы создаем глобальную ссылку NPM.
  4. Наконец, мы возвращаемся к основному проекту (тот, на котором мы работаем с Трэвисом). Обратите внимание, что это имя должно совпадать с именем хранилища на GitHub, поскольку это имя будет использовать Трэвис.

Кроме того, нам нужно использовать созданную выше ссылку, поэтому в разделе установки добавьте следующую строку:

install:
- npm install
- npm link my-dependency

Убедитесь, что вы поставили ссылку npm после npm install, так как по умолчанию npm install уничтожит любые ссылки (очень досадная ошибка для тех из нас, кто использует npm link).

...