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

Использование Composer и Private Repository на GitHub с использованием VCS на сервере сборки

Мой 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, мы не можем вводить учетные данные и хотели бы, чтобы это автоматизировано.

Что мы можем сделать, чтобы позволить композитору получить доступ к нашему частному репо во время сборки?

4b9b3361

Ответ 2

Я понимаю, что заголовок вопроса специально упоминает использование типа "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.

Ответ 3

В URL-адресах исходного вопроса отсутствует двоеточие:

"url": "[email protected]/company/private.git"

должен быть

"url": "[email protected]:/company/private.git"

У меня была одна и та же проблема, и это исправило ее.

Ответ 4

"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.
  • произвольная версия: Номер случайной версии; не должен существовать как версия в GitHub.
  • github-username: Учетная запись пользователя GitHub, в которой находится репо.
  • github-repository: Имя репозитория GitHub.
  • ветвь: Разделитель GitHub, используемый при проверке кода.

Две вещи, которые дали мне наибольшую проблему, - двоеточие (:) не должно (не должно?) сопровождаться косой чертой (/). Не забудьте поставить .git в конце url.

Точки гипотезы и неопределенности:

  • Я не уверен, что произойдет, если вы измените член package.name на что-то неправильное. Другими словами, я не знаю, является ли это внутренней ссылкой только для require; или, если там будет что-то еще.
  • Я не уверен, что ветвь на самом деле меняет что-то, и я не могу ее проверить.