¿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: 'git@bitbucket.org: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.

Respuestas:


161

Puede utilizar lo siguiente en una canalización:

git branch: 'master',
    credentialsId: '12345-1234-4696-af25-123455',
    url: 'ssh://git@bitbucket.org: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.


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://git@test.com/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.


2
¿Cómo generar este credentialsId?
indefinido


¿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: 'git@github.com<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}"
    )

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

¿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...
    '''
}

1

Me resolvió usando

checkout scm: ([
                    $class: 'GitSCM',
                    userRemoteConfigs: [[credentialsId: '******',url: ${project_url}]],
                    branches: [[name: 'refs/tags/${project_tag}']]
            ])
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.