Подтвердить что ты не робот

Права доступа к субмодулю 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

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

4b9b3361

Ответ 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