Pregunta Usando Composer y Private Repository en GitHub usando VCS en Build Server


My compsoser.json utiliza 2 repositorios privados de nuestra cuenta de organización Github y es el siguiente.

{
    "name": "API",
    "repositories": [
      {
        "type": "vcs",
        "url": "git@github.com/company/private.git"
      },
      {
        "type": "vcs",
        "url": "git@github.com/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"
    }
}

Configuramos las claves SSH y las agregamos a las claves autorizadas en nuestro servidor intermedio. Cuando ejecutamos git clone, funciona perfectamente y no pide ninguna credencial.

Sin embargo, cuando ejecutamos la actualización del compositor, la recuperación de los repositorios falla porque el compositor no tiene acceso a los repositorios.

Como esto se ejecuta de una manera no interactiva ya que es parte de un script de compilación, no podemos ingresar credenciales y desear que esto se automatice.

¿Qué podemos hacer para permitir que el compositor tenga acceso a nuestro repositorio privado durante la compilación?


24
2017-08-20 08:43


origen


Respuestas:


Puede configurar el compositor para usar archivos clave para acceder al repositorio privado.

Más información: https://getcomposer.org/doc/articles/handling-private-packages-with-satis.md#security


13
2017-08-20 08:47



Entiendo que el título de la pregunta menciona específicamente usar el tipo 'vcs', pero este es un metodo alternativo de usar repositorios git privados para implementar un proyecto como un paquete.

"repositories": [
  {
    "type": "package",
    "package": {
      "name": "company/private",
      "version": "0.1.0",
      "type": "package",
      "source": {
        "url": "git@github.com:/company/private.git",
        "type": "git",
        "reference": "master"
      }
    }
  }
],
"require": {
  "company/private": "*"
}

La limitación es que debe cambiar manualmente el número de versión cada vez que implemente si desea la última versión. Sin embargo, esta es también su ventaja.

La definición de un repositorio de esta manera le permitirá extraer un versión etiquetada específica. En este caso, la confirmación con etiqueta 0.1.0 será tirado composer update.

Deberá agregar las claves SSH del servidor al que está implementando en su cuenta de github.


26
2018-06-15 10:12



A las URL en su pregunta original les faltan dos puntos:

"url": "git@github.com/company/private.git"

debiera ser

"url": "git@github.com:/company/private.git"

Solo tuve el mismo problema y esto lo solucionó.


6
2018-02-14 12:48



"name": "{vendor}/{package-name}",    
"repositories": [
    {
        "type": "package",
        "package": {
            "name": "{vendor}/{package-name}",
            "version": "{arbitrary-version}",
            "type": "package",
            "source": {
                "url": "git@github.com:{github-username}/{github-repository}.git",
                "type": "git",
                "reference": "{branch}"
            }
        }
    }
]
"require": {
    "{vendor}/{package-name}": "*"
}

Realmente aprecié las respuestas y la orientación; sin embargo, podría no conseguir la solución que funcione para mí. Y, creo que la respuesta podría usar algunos detalles adicionales con respecto a lo que parece estar sucediendo aquí.

  • vendedor: El nombre del vendedor utilizado en el paquete composer.json.
  • Nombre del paquete: El nombre del paquete del usuario en el paquete composer.json.
  • Versión arbitraria: Un número de versión aleatorio; no necesita existir como una versión en GitHub.
  • github-username: La cuenta de usuario de GitHub donde vive el repositorio.
  • github-repository: El nombre del repositorio GitHub.
  • rama: La rama GitHub para usar al verificar el código.

Las dos cosas que me dieron el mayor problema fueron los dos puntos (:) no (¿no debería?) ser seguido por una barra inclinada (/) No te olvides de poner .git al final de url.

Puntos de conjetura e incertidumbre:

  1. No estoy seguro de qué pasaría si cambiaras el package.name miembro de algo incorrecto. En otras palabras, no sé si esta es una referencia interna para require solo; o, si habrá algo más allí.
  2. No estoy seguro si la rama realmente cambia algo y no estoy en posición de probar.

3
2017-09-17 18:46



Preguntas populares