web-dev-qa-db-fra.com

Utilisation de Composer et référentiel privé sur GitHub à l'aide de VCS sur Build Server

Mon compsoser.json utilise 2 référentiels privés de notre compte Github d'organisation et se présente comme suit.

{
    "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"
    }
}

Nous avons configuré les clés SSH et les avons ajoutées aux clés autorisées sur notre serveur de transfert. Lorsque nous exécutons git clone, cela fonctionne parfaitement et ne demande aucune information d'identification.

Cependant, lorsque nous exécutons composer update, la récupération des référentiels échoue car composer n'a pas accès aux référentiels).

Étant donné que cela est exécuté de manière non interactive car cela fait partie d'un script de construction, nous ne pouvons pas entrer les informations d'identification et aimer faire automatiser cela.

Que pouvons-nous faire pour permettre à composer d'avoir accès à nos dépôts privés pendant la construction?

26
Simon

Vous pouvez configurer composer pour utiliser des fichiers clés pour accéder au référentiel privé.

Plus d'informations: https://getcomposer.org/doc/articles/handling-private-packages-with-satis.md#security

14
michail_w

Je comprends que le titre de la question mentionne spécifiquement l'utilisation du type 'vcs', mais il s'agit d'une méthode alternative d'utilisation de git repos privé pour déployer un projet en tant que package.

"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": "*"
}

La limitation est que vous devez modifier manuellement le numéro de version à chaque fois que vous déployez si vous souhaitez la dernière version. Mais c'est aussi son avantage.

Définir un dépôt de cette manière vous permettra d'extraire une version balisée spécifique . Dans ce cas, la validation avec la balise 0.1.0 sera tiré composer update.

Vous devrez ajouter les clés SSH du serveur sur lequel vous déployez dans votre compte github.

29
myol

Il manque deux points dans les URL de votre question d'origine:

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

devrait être

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

J'ai juste eu le même problème et cela l'a résolu.

8
Stuart Cusack
"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}": "*"
}

J'ai vraiment apprécié les réponses et les conseils; cependant, ne pourrait pas faire fonctionner la solution pour moi. Et, je pense que la réponse pourrait éventuellement utiliser des détails supplémentaires concernant ce qui semble se passer ici.

  • fournisseur: Le nom du fournisseur utilisé dans le composer.json du package.
  • package-name: L'utilisateur du nom du package dans le composer.json du package.
  • arbitraire-version: Un numéro de version aléatoire; n'a pas besoin d'exister en tant que version dans GitHub.
  • github-username: Le compte utilisateur GitHub où réside le dépôt.
  • github-repository: Le nom du référentiel GitHub.
  • branch: La branche GitHub à utiliser lors de l'extraction du code.

Les deux choses qui m'ont donné le plus gros problème étaient les deux points (:) Ne sont pas (ne devraient pas?) Être suivis d'une barre oblique (/). N'oubliez pas de mettre .git À la fin du url.

Points de conjecture et d'incertitude:

  1. Je ne sais pas ce qui se passerait si vous changez le membre package.name En quelque chose de incorrect. En d'autres termes, je ne sais pas s'il s'agit d'une référence interne pour require seul; ou s'il se passera autre chose là-bas.
  2. Je ne sais pas si la branche change réellement quelque chose et je ne suis pas en mesure de tester.
4
Josh Bruce