Права доступа к субмодулю github (Travis CI)
Невозможно обновить подмодуль git. Получена ошибка:
$ git submodule init
Submodule 'build/html' ([email protected]:quadroid/clonejs.git) registered for path 'build/html'
...
$ git submodule update
Cloning into 'build/html'...
Warning: Permanently added 'github.com,207.97.227.239' (RSA) to the list of known hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.
полный журнал:
https://travis-ci.org/quadroid/clonejs/jobs/5855553
Но когда я выполняю одни и те же задачи локально, все в порядке.
Ответы
Ответ 1
Это можно (к счастью) легко решить, изменив файл .gitmodules на лету на Travis, чтобы URL-адрес SSH был заменен открытым URL-адресом перед инициализацией подмодулей. Для этого добавьте следующее в .travis.yml:
# Handle git submodules yourself
git:
submodules: false
# Use sed to replace the SSH URL with the public URL, then initialize submodules
before_install:
- sed -i 's/[email protected]:/https:\/\/github.com\//' .gitmodules
- git submodule update --init --recursive
Спасибо Майклу Iedema за его gist, из которого я получил это решение.
Если ваши подмодули являются частными репозиториями, для включения учетных данных в URL-адресах https следует использовать учетные данные https, я рекомендую сделать токен доступа GitHub с ограниченными разрешениями для этой цели:
# Replace <user> and <token> with your GitHub username and access token respectively
- sed -i 's/[email protected]:/https:\/\/<user>:<token>@github.com\//' .gitmodules
Ответ 2
Я бы рекомендовал использовать схему https
для подмодулей, так как это позволит вам тянуть Travis и нажимать локально: https://github.com/quadroid/clonejs.git
.
Ответ 3
Теперь Travis поддерживает доступ к подмодулю с использованием ssh, что на сегодняшний день является самым простым решением. Вам просто нужно связать свой ssh-ключ (или ключ ssh выделенного пользователя CI) с проектом Github, который вы строите, как описано в документации для частных зависимостей.
$ travis sshkey --upload ~/.ssh/id_rsa -r myorg/main
Обратите внимание, что Travis рекомендует создать выделенного пользователя, чтобы вам не пришлось использовать свой собственный ключ ssh.
Ответ 4
Вы получаете эту ошибку, потому что вы указали свои подмодули через ssh-urls. Для доступа ssh из среды travis-ci вам необходимо настроить ключ.
В качестве альтернативы вы можете просто использовать относительные URL-адреса для ваших подмодулей git, поскольку вы создаете проект, и ваши подмодули доступны в Github.
Git разрешает относительные URL-адреса в отношении ORIGIN
.
Пример:
Используя первые 2 записи из .gitmodules
:
[submodule "lib/es5-shim"]
path = lib/es5-shim
url = [email protected]:kriskowal/es5-shim.git
[submodule "build/html"]
path = build/html
url = [email protected]:quadroid/clonejs.git
Заменяется относительными URL-адресами:
[submodule "lib/es5-shim"]
path = lib/es5-shim
url = ../../kriskowal/es5-shim.git
[submodule "build/html"]
path = build/html
url = ../clonejs.git
Затем, когда клонирование - скажем - через https, источник устанавливается следующим образом:
$ git clone https://github.com/quadroid/clonejs.git
$ cd clonejs
$ git remote -v
origin https://github.com/quadroid/clonejs.git (fetch)
origin https://github.com/quadroid/clonejs.git (push)
При клонировании через ssh:
$ git clone [email protected]:quadroid/clonejs.git
$ cd clonejs
$ git remote -v
origin [email protected]:quadroid/clonejs.git (fetch)
origin [email protected]:quadroid/clonejs.git (push)
С относительными URL-адресами обычная последовательность подмодулей работает независимо от начала координат:
$ git submodule init
$ git submodule update
Ответ 5
Вы также можете непосредственно манипулировать файлом .gitmodules через git
. (Вдохновленный этот ответ).
git config --file=.gitmodules submodule.SUBMODULE_PATH.url https://github.com/ORG/REPO.git