¿Verifique Jenkins Pipeline Git SCM con credenciales?

104

Estaba siguiendo este tutorial :

node {
  git url: 'https://github.com/joe_user/simple-maven-project-with-tests.git'
  ...
}

Sin embargo, no dice cómo agregar credenciales. Jenkins tiene una sección específica de "Credenciales" en la que se define el usuario y la contraseña del usuario, y luego se obtiene la identificación para usarla en los trabajos, pero ¿cómo la uso en las instrucciones de Pipeline?

Lo intenté con:

git([url: '[email protected]:company/repo.git', branch: 'master', credentialsId: '12345-1234-4696-af25-123455'])

sin suerte:

stderr: Host key verification failed.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

¿Hay alguna forma de configurar los créditos en la canalización, o tengo que poner las claves SSH en el archivo .ssh / allowed_keys del usuario de Linux de Jenkin?

En un mundo ideal, me gustaría tener un repositorio para trabajos de canalización y claves de repositorio, luego iniciar Docker Jenkins y agregar dinámicamente estos trabajos y claves allí sin tener que configurar nada en la consola de Jenkins.

Hacer
fuente

Respuestas:

161

Puede utilizar lo siguiente en una canalización:

git branch: 'master',
    credentialsId: '12345-1234-4696-af25-123455',
    url: 'ssh://[email protected]:company/repo.git'

Si está utilizando la URL ssh, sus credenciales deben ser nombre de usuario + clave privada. Si está utilizando la URL de clonación https en lugar de la ssh, entonces sus credenciales deben ser nombre de usuario + contraseña.

Serban Constantin
fuente
1
Eso lo solucionó, gracias. ¡No sabía que SSH-url y HTTPS-url requieren diferentes credenciales para trabajar!
Render
3
fue útil, pero credentialsIdviene de id /var/lib/jenkins/credentials.xmlya que tuve que luchar para resolverlo.
prayagupd
17
@prayagupd, debería poder obtener el ID de credencial de la página de credenciales ( http://yourjenkinsinstall/credentials). No es necesario rastrear los archivos de configuración.
Serban Constantin
4
Para aquellos que preguntan "Cómo generar un ID de credencial". Aquí cómo encontrarlo. [1. Haga clic en Credenciales en la página de inicio de Jenkins, 2. Luego verá una tabla con todas las credenciales que creó. 3. La identificación está en esta tabla]
vincedjango
1
Para mí, no pudo resolver la URL cuando la configuré para comenzar ssh://. Quitándolo, lo arreglé.
Moshisho
30

Para pagar explícitamente usando credenciales específicas

    stage('Checkout external proj') {
        steps {
            git branch: 'my_specific_branch',
                credentialsId: 'my_cred_id',
                url: 'ssh://[email protected]/proj/test_proj.git'

            sh "ls -lat"
        }
    }

Para realizar el pago en función de las credenciales configuradas en el trabajo actual de Jenkins

    stage('Checkout code') {
        steps {
            checkout scm
        }
    }

Puede usar ambas etapas en un solo archivo Jenkins.

Upul Doluweera
fuente
2
¿Cómo generar este credentialsId?
indefinido
echa un vistazo - support.cloudbees.com/hc/en-us/articles/…
Upul Doluweera
¿Dónde debo almacenar el archivo de credenciales? jenkins sais: Advertencia: No se pudo encontrar CredentialId "jenkins_key".
Dinu Nicolae
Las credenciales de @Dinu se crean en Jenkins, debería verlas en el menú principal si el complemento está instalado. support.cloudbees.com/hc/en-us/articles/…
Upul Doluweera
1
¡gracias! alguien que publicó todo el asunto en lugar de solo un poco aquí y un poco aquí, y esperando que la gente sepa mágicamente qué poner para el resto.
25

Si desea utilizar credenciales ssh,

  git(
       url: '[email protected]<repo_name>.git',
       credentialsId: 'xpc',
       branch: "${branch}"
    )

si desea usar credenciales de nombre de usuario y contraseña, debe usar http clone como se mencionó en @Serban.

    git(
       url: 'https://github.com/<repo_name>.git',
       credentialsId: 'xpc',
       branch: "${branch}"
    )
f-sociedad
fuente
10
¿Cómo generar este credentialsId?
indefinido
Genere las credenciales así: help.github.com/en/articles/… , agregué la clave pública a mi git, pero ¿dónde tengo que almacenar este archivo? Jenkins dice: Advertencia: No se pudo encontrar CredentialId "jenkins_key".
Dinu Nicolae
@DinuNicolae, consulte el Adding new global credentials -> 7.siguiente enlace. jenkins.io/doc/book/using/using-credentials
f-society
14

Agregando un ejemplo rápido usando el complemento de git GitSCM :

    checkout([
        $class: 'GitSCM', 
        branches: [[name: '*/master']], 
        doGenerateSubmoduleConfigurations: false, 
        extensions: [[$class: 'CleanCheckout']], 
        submoduleCfg: [], 
        userRemoteConfigs: [[credentialsId: '<gitCredentials>', url: '<gitRepoURL>']]
    ])

en tu tubería

stage('checkout'){
    steps{
        script{
            checkout
        }
    }
}
avivamg
fuente
¿Sabes cómo usar una credencial global para todo el equipo? ¿O hay alguna manera de que cualquier desarrollador que esté presionando a github, pueda proporcionar sus credenciales sin tener que exponerlo en el archivo Jenkins
Henhen
Puede administrar su mecanismo relacionado con su propia lógica en su equipo de desarrollo y usar diferentes claves de credenciales para cada grupo. por ejemplo: si un usuario de Github está en la lista de 'backend_developers' use <gitCredentialsGroupA>, si el usuario de Github en la lista de 'frontend_developers' usa <gitCredentialsGroupB>, diseñe su mecanismo relacionado con su propio caso de uso.
avivamg
¿Dónde guardarías estas credenciales? ¿Es con el complemento Jenkins Credentials?
Henhen
Utilice la documentación de las credenciales de Jenkins - jenkins.io/doc/book/using/using-credentials
avivamg
1
He buscado por todas partes un checkoutejemplo simple como este, gracias.
301_Moved_Permanently
1

Por lo que vale la pena agregar a la discusión ... lo que hice que terminó ayudándome ... Dado que la canalización se ejecuta dentro de un espacio de trabajo dentro de una imagen de la ventana acoplable que se limpia cada vez que se ejecuta. Tomé las credenciales necesarias para realizar las operaciones necesarias en el repositorio dentro de mi canalización y las almacené en un archivo .netrc. esto me permitió autorizar las operaciones de repositorio de git con éxito.

withCredentials([usernamePassword(credentialsId: '<credentials-id>', passwordVariable: 'GIT_PASSWORD', usernameVariable: 'GIT_USERNAME')]) {
    sh '''
        printf "machine github.com\nlogin $GIT_USERNAME\n password $GIT_PASSWORD" >> ~/.netrc
        // continue script as necessary working with git repo...
    '''
}
madeyejm
fuente
1

Me resolvió usando

checkout scm: ([
                    $class: 'GitSCM',
                    userRemoteConfigs: [[credentialsId: '******',url: ${project_url}]],
                    branches: [[name: 'refs/tags/${project_tag}']]
            ])
Sarang
fuente