Fazer check-out do Jenkins Pipeline Git SCM com credenciais?


104

Eu estava seguindo este tutorial :

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

No entanto, não diz como adicionar credenciais. O Jenkins tem uma seção específica de "Credenciais", onde você define usuário e senha de usuário e, em seguida, obtém a ID para usar em jobs, mas como faço para usar isso nas instruções do Pipeline?

Eu tentei com:

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

sem sorte:

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.

Existe uma maneira de configurar os creds no pipeline ou eu tenho que colocar as chaves SSH no arquivo .ssh / authorized_keys do usuário do Jenkin Linux?

No mundo ideal, eu gostaria de ter um repositório para trabalhos de pipeline e repo-keys, iniciar o Docker Jenkins e adicionar dinamicamente esses trabalhos e chaves sem precisar configurar nada no Console do Jenkins.

Respostas:


161

Você pode usar o seguinte em um pipeline:

git branch: 'master',
    credentialsId: '12345-1234-4696-af25-123455',
    url: 'ssh://git@bitbucket.org:company/repo.git'

Se você estiver usando o url ssh, suas credenciais devem ser nome de usuário + chave privada. Se você estiver usando o URL do clone https em vez do ssh, então suas credenciais devem ser nome de usuário + senha.


1
Isso resolveu, obrigado. Eu não sabia que SSH-url e HTTPS-url exigem credenciais diferentes para funcionar!
Renderizar em

3
foi útil, mas credentialsIdvem do id, /var/lib/jenkins/credentials.xmlpois tive que lutar para descobrir.
prayagupd 01 de

17
@prayagupd, você deve conseguir obter o ID da credencial na página de credenciais ( http://yourjenkinsinstall/credentials). Não há necessidade de vasculhar os arquivos de configuração.
Serban Constantin

4
Para aqueles que perguntam "Como gerar um credentialsId". Veja como encontrá-lo. [1. Clique em Credenciais na página inicial do Jenkins, 2. Você verá uma tabela com todas as credenciais criadas. 3. O ID está nesta tabela]
vincedjango

1
Para mim, não conseguiu resolver o URL quando o configurei para começar ssh://. Removendo e consertando.
Moshisho

30

Para finalizar a compra explicitamente usando uma credencial específica

    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 finalizar a compra com base nas credenciais configuradas no Jenkins Job atual

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

Você pode usar os dois estágios em um único arquivo Jenkins.


2
como gerar este credentialsId?
indefinido


onde devo armazenar o arquivo de credenciais. jenkins sais: Aviso: CredentialId "jenkins_key" não foi encontrado.
Dinu Nicolae

As credenciais @Dinu são criadas no Jenkins, você deve vê-las no menu principal se o plugin estiver instalado. support.cloudbees.com/hc/en-us/articles/…
Upul Doluweera

1
obrigado! alguém que postou a coisa toda em vez de apenas um pouco aqui e um pouco aqui, e esperando que as pessoas magicamente saibam o que colocar para o resto.

25

Se você quiser usar credenciais ssh,

  git(
       url: 'git@github.com<repo_name>.git',
       credentialsId: 'xpc',
       branch: "${branch}"
    )

se quiser usar credenciais de nome de usuário e senha, você precisa usar o clone http como @Serban mencionado.

    git(
       url: 'https://github.com/<repo_name>.git',
       credentialsId: 'xpc',
       branch: "${branch}"
    )

10
como gerar este credentialsId?
indefinido

Gerei as credenciais como esta: help.github.com/en/articles/… , adicionei a chave pública ao meu git, mas onde devo armazenar este arquivo. Jenkins diz: Aviso: CredentialId "jenkins_key" não foi encontrado.
Dinu Nicolae

@DinuNicolae consulte o Adding new global credentials -> 7.seguinte link. jenkins.io/doc/book/using/using-credentials
f-society

14

Adicionando a você um exemplo rápido usando o plugin git GitSCM :

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

em seu pipeline

stage('checkout'){
    steps{
        script{
            checkout
        }
    }
}

você sabe como usar credenciais globais para toda a equipe? Ou existe uma maneira de qualquer desenvolvedor que esteja empurrando para o github, eles possam fornecer suas credenciais sem ter que expô-lo no Jenkinsfile
henhen

Você pode gerenciar seu mecanismo relacionado à sua própria lógica em sua equipe de desenvolvimento e usar chaves de credenciais diferentes para cada grupo. por exemplo: Se um usuário do Github estiver na lista de 'backend_developers', use <gitCredentialsGroupA>, Se o usuário do Github na lista de 'frontend_developers' usar <gitCredentialsGroupB>, projete seu mecanismo relacionado ao seu próprio caso de uso.
avivamg

onde você guardaria essas credenciais? É com o plugin Jenkins Credentials?
Galinha,

Use a documentação de credenciais do Jenkins - jenkins.io/doc/book/using/using-credentials
avivamg

1
Eu procurei em toda parte por um checkoutexemplo simples como este, obrigado.
301_Moved_Permanently

1

Pelo que vale a pena acrescentar à discussão ... o que eu fiz que acabou me ajudando ... Já que o pipeline é executado dentro de um espaço de trabalho dentro de uma imagem do docker que é limpa cada vez que é executado. Peguei as credenciais necessárias para executar as operações necessárias no repo dentro do meu pipeline e as armazenei em um arquivo .netrc. isso me permitiu autorizar as operações de repositório git com sucesso.

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

Resolveu para mim usando

checkout scm: ([
                    $class: 'GitSCM',
                    userRemoteConfigs: [[credentialsId: '******',url: ${project_url}]],
                    branches: [[name: 'refs/tags/${project_tag}']]
            ])
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.