2012-03-19 19 views
34

Disculpe por el estilo 'svn': estamos en un proceso de migración de SVN a GIT (incluido nuestro entorno de CI Jenkins).En Jenkins, cómo completar un proyecto en un directorio específico (usando GIT)

Lo que necesitamos es hacer que Jenkins complete (¿o debería decir clonar?) El proyecto GIT (¿repositorio?) En un directorio específico. Hemos intentado algunos refspecs mágicos pero no fue demasiado obvio para entenderlos y usarlos con éxito.

Además, si en el mismo proyecto de Jenkins necesitamos verificar varios repositorios privados de GitHub en varios directorios separados bajo una raíz de proyecto, ¿cómo podemos hacerlo, por favor?

Tenemos el plugin GitHub instalado. Espero que hayamos dicho las cosas bien.

Respuesta

30

El valor predeterminado para git plugin Jenkins hace el trabajo bastante bien.

Después de añadir un nuevo repositorio git (proyecto de configuración>Fuente Gestión Código> marque la opción GIT) para el proyecto vaya a la parte inferior de la configuración del plugin, justo por encima de navegador de repositorios región. Debe haber un botón Advanced. Después de hacer clic en él, debe aparecer un nuevo formulario, con un valor que se describe como Subdirectorio local para el repositorio (opcional). Estableciendo esto en folder hará que el complemento verifique el repositorio en la carpeta relativa a su área de trabajo. De esta forma, puede tener tantos repositorios en su proyecto como necesite, todos en ubicaciones separadas.

Alternativamente, si el proyecto que está utilizando lo permitirá, puede usar submódulos GIT, que son similares a los caminos externos en SVN. En el GIT Book hay una sección sobre ese mismo tema. Si eso no va en contra de alguna política, los submódulos son bastante simples de usar, ofreciéndole una forma poderosa de controlar las ubicaciones, las versiones/etiquetas/sucursales que se importarán Y estará disponible en su repositorio local y le brindará una mejor portabilidad.

Obviamente, el complemento GIT admite la extracción de submódulos, por lo que Jenkins puede trabajar con ellos de manera bastante efectiva.

+10

Solo hay un subdirectorio _Local para la configuración repo_ para todos los repositorios, por lo que no es realmente adecuado para administrar varios repositorios. Ver https://issues.jenkins-ci.org/browse/JENKINS-13086. – ubuntudroid

+4

Ni siquiera veo esta opción usando el plugin Git 2.4.2. Esta respuesta tiene 4 años, entonces tal vez la opción ha sido eliminada. (Sin embargo, veo el "Pago y envío a un subdirectorio" como se menciona en otra respuesta por @biolinh, pero eso es para todos los repositorios. – Zitrax

+1

"Realizar el pedido en el subdirectorio" se encuentra en la sección "Comportamientos adicionales" del complemento git. , que todavía te limita a un único repositorio de git por trabajo. Si necesitas más de un repositorio de git por trabajo, utiliza la interconexión de Jenkins. –

-3

No utilizo el plugin github, pero desde la página de introducción, es más o menos como el plugin gerrit-trigger.

Puede instalar el plugin git, que puede ayudarle a pagar sus proyectos, si desea incluir proyectos múltiples en un solo trabajo de jenkins, simplemente agregue el repositorio en su trabajo.

Br, Tim

5

Además, si en el mismo proyecto de Jenkins necesitamos verificar varios repositorios privados de GitHub en varios directorios separados bajo una raíz de proyecto. ¿Cómo podemos hacerlo por favor?

El Jenkin's Multiple SCMs Plugin ha resuelto muy bien el problema de varios repositorios. Acabo de trabajar en una compilación de proyecto que comprueba cuatro repositorios git diferentes en una carpeta común. (Soy un poco reacio a usar superproyectos de git como suggested previously por Łukasz Rżanek, ya que git es lo suficientemente complejo sin submódulos.)

+0

Múltiple SCM no muestra cambios para cada compilación, hay un error y ya son 1.5 el año no lo solucionó :( –

33

Estoy de acuerdo con @ Łukasz Rżanek que podemos utilizar git plugin

embargo, la opción de uso: la caja a una sub-dirección de lo que es habilitar la siguiente manera:
En Código Fuente Gestión, tic Git
clic botón Agregar, seleccione pago y envío a un subdirectorio

enter image description here

+1

Pero no puede establecer diferentes carpetas para repositorios diferentes. –

+0

En mi caso, mi trabajo Jenkins solo clona el código de un repositorio. No he intentado hacer este caso. – biolinh

10

Vale la pena investigar el plugin Pipeline. Con el complemento puede consultar múltiples proyectos de VCS en rutas de directorio relativas. Antes de crear un directorio por pago de VCS. A continuación, emita mandatos al espacio de trabajo de VCS recién desprotegido. En mi caso estoy usando git. Pero deberías entender la idea.

node{ 
    def exists = fileExists 'foo' 
    if (!exists){ 
     new File('foo').mkdir() 
    } 
    dir ('foo') { 
     git branch: "<ref spec>", changelog: false, poll: false, url: '<clone url>' 
     ...... 
    } 
    def exists = fileExists 'bar' 
    if (!exists){ 
     new File('bar').mkdir() 
    } 
    dir ('bar') { 
     git branch: "<ref spec>", changelog: false, poll: false, url: '<clone url>' 
     ...... 
    } 
    def exists = fileExists 'baz' 
    if (!exists){ 
     new File('baz').mkdir() 
    } 
    dir ('baz') { 
     git branch: "<ref spec>", changelog: false, poll: false, url: '<clone url>' 
     ...... 
    } 
} 
+0

Esto da el error, 'Scripts no permitidos para usar java.io.File java.lang.String' nuevo, que es verdadero. Vea mi respuesta para una forma de usar el generador de fragmentos de código de tubería para crear el código que necesita para su tubería script o Jenkinsfile. –

+0

Podría usar 'sh" mkdir -p directory' como una solución alternativa para 'Scripts no permitidos ...' – Aerse

22

En el nuevo Jenkins 2,0 tubería (anteriormente llamado el flujo de trabajo Plugin), esto se hace de forma diferente para:

  • el repositorio principal
  • Otros repositorios adicionales

Aquí me refiero específicamente a la versión 2.9 de Multibranch Pipeline.

repositorio principal

Este es el repositorio que contiene su Jenkinsfile.

En la pantallaconfigurar en su proyecto de la tubería, introduzca su nombre de repositorio, etc.

No utilice comportamientos adicionales> cheque a un subdirectorio. Esto colocará su Jenkinsfile en el subdirectorio where Jenkins cannot find it.

En Jenkinsfile, descargar el repositorio principal en el subdirectorio usando dir():

dir('subDir') { 
    checkout scm 
} 

repositorios adicionales

Si desea ver más repositorios, utilice el generador Pipeline Sintaxis de generar automáticamente un fragmento de código Groovy.

En la pantallaconfigurar en su proyecto de la tubería:

  1. Seleccionar Pipeline Sintaxis. En el Muestra Paso menú desplegable, elija pago y envío: General SCM.
  2. Seleccione su sistema SCM, como Git.Complete la información habitual sobre su repositorio o depósito.
  3. Tenga en cuenta que en la interconexión de líneas múltiples, la variable de entorno env.BRANCH_NAME contiene el nombre de la rama del repositorio principal.
  4. En los comportamientos adicionales menú desplegable, seleccione Salida a un subdirectorio
  5. Haga clic en Generar maravilloso. Jenkins mostrará el fragmento de código de Groovy correspondiente a la salida de SCM que ha especificado.
  6. Copie este código en la secuencia de comandos de tubería o Jenkinsfile.
+5

Fragmento de código aquí: 'checkout ([$ class: 'GitSCM', branches: [[name: '*/branchname ']], doGenerateSubmoduleConfigurations: false, extensiones: [[$ class:' RelativeTargetDirectory ', relativeTargetDir:' MyDirectory ']], submoduleCfg: [], userRemoteConfigs: [[credentialsId:' myId ', url:' https: // github .com/jenkinsci/jenkins.git ']]]) ' –

+0

En realidad, creo que la respuesta de @davey_dev es la correcta. Si ingresas por primera vez en un subdirectorio con el paso' dir (' subDir ') ', entonces el repositorio clonar en otro subdirectorio de subDir y obtendrás 'subDir/[nombre de repo]/[contenido]'. Estaba buscando una forma de obtener 'dubDir \ [contents]' así que usando 'relativeTargetDir' era el forma correcta de hacerlo. – Mig82

Cuestiones relacionadas