Ответ 1
Вы можете настроить композитор на использование файлов ключей для доступа к частному репозиторию.
Дополнительная информация: https://getcomposer.org/doc/articles/handling-private-packages-with-satis.md#security
Мой compsoser.json использует 2 частных репозитория из нашей учетной записи Organization Github и выглядит следующим образом.
{
"name": "API",
"repositories": [
{
"type": "vcs",
"url": "[email protected]/company/private.git"
},
{
"type": "vcs",
"url": "[email protected]/company/private2.git"
}
],
"require": {
"php": ">=5.3.3",
"zendframework/zendframework": ">2.1.3",
"doctrine/mongodb-odm": "dev-master",
"doctrine/doctrine-mongo-odm-module": "dev-master",
"company/private": "dev-master",
"company/private2": "dev-master"
}
}
Мы установили ключи SSH и добавили их к авторизованным ключам на нашем промежуточном сервере. Когда мы запускаем клон git, он отлично работает и не запрашивает никаких учетных данных.
Однако, когда мы запускаем обновление композитора, выборка репозиториев не выполняется, потому что композитор не имеет доступа к репозиториям.
Так как это выполняется неинтерактивным способом, так как это часть сборки script, мы не можем вводить учетные данные и хотели бы, чтобы это автоматизировано.
Что мы можем сделать, чтобы позволить композитору получить доступ к нашему частному репо во время сборки?
Вы можете настроить композитор на использование файлов ключей для доступа к частному репозиторию.
Дополнительная информация: https://getcomposer.org/doc/articles/handling-private-packages-with-satis.md#security
Я понимаю, что заголовок вопроса специально упоминает использование типа "vcs", но это альтернативный метод с использованием закрытых репозиторий git для развертывания проект как пакет.
"repositories": [
{
"type": "package",
"package": {
"name": "company/private",
"version": "0.1.0",
"type": "package",
"source": {
"url": "[email protected]:/company/private.git",
"type": "git",
"reference": "master"
}
}
}
],
"require": {
"company/private": "*"
}
Ограничение заключается в том, что вы должны вручную изменить номер версии каждый раз, когда вы развертываете, если вы хотите использовать последнюю версию. Однако это также является его преимуществом.
Определение репо таким образом позволит вам вытащить определенную тегированную версию. В этом случае фиксация с тегом 0.1.0
будет нажата на composer update
.
Вам нужно будет добавить ключи SSH сервера, на который вы развертываете, в свою учетную запись github.
В URL-адресах исходного вопроса отсутствует двоеточие:
"url": "[email protected]/company/private.git"
должен быть
"url": "[email protected]:/company/private.git"
У меня была одна и та же проблема, и это исправило ее.
"name": "{vendor}/{package-name}",
"repositories": [
{
"type": "package",
"package": {
"name": "{vendor}/{package-name}",
"version": "{arbitrary-version}",
"type": "package",
"source": {
"url": "[email protected]:{github-username}/{github-repository}.git",
"type": "git",
"reference": "{branch}"
}
}
}
]
"require": {
"{vendor}/{package-name}": "*"
}
Я действительно оценил ответы и рекомендации; однако, не смог заставить решение работать для меня. И, я думаю, ответ мог бы использовать некоторые дополнительные детали в отношении того, что, по-видимому, происходит здесь.
composer.json
.composer.json
.Две вещи, которые дали мне наибольшую проблему, - двоеточие (:
) не должно (не должно?) сопровождаться косой чертой (/
). Не забудьте поставить .git
в конце url
.
Точки гипотезы и неопределенности:
package.name
на что-то неправильное. Другими словами, я не знаю, является ли это внутренней ссылкой только для require
; или, если там будет что-то еще.