使用凭据 checkout Jenkins Pipeline Git SCM?

8wtpewkr  于 2022-12-28  发布在  Git
关注(0)|答案(6)|浏览(242)

我在跟踪this tutorial

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

Jenkins确实有特定的"Credentials"部分,您可以在其中定义用户user & pass,然后获取ID以便在作业中使用,但如何在Pipeline指令中使用它呢?
我尝试了:

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

没有运气:

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.

有没有办法在管道中配置cred,或者我必须将SSH密钥放入Jenkin的Linux用户的. ssh/authorized_keys文件中?
在理想的情况下,我希望有一个管道作业和repo-key的存储库,然后启动Docker Jenkins,并动态地添加这些作业和key,而不必在Jenkins Console中配置任何内容。

ctzwtxfj

ctzwtxfj1#

您可以在管线中使用以下各项:

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

如果你使用ssh url,那么你的凭据必须是用户名+私钥,如果你使用https克隆url而不是ssh url,那么你的凭据应该是用户名+密码。

falq053o

falq053o2#

使用特定凭据显式 checkout

stage('Checkout external proj') {
        steps {
            git branch: 'my_specific_branch',
                credentialsId: 'my_cred_id',
                url: 'git@test.com/proj/test_proj.git'

            sh "ls -lat"
        }
    }

根据当前Jenkins作业中配置的凭据 checkout

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

可以在单个Jenkins文件中使用这两个阶段。

rryofs0p

rryofs0p3#

给你一个使用git插件GitSCM的简单例子:

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

在您的管道中

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

ulydmbyx4#

如果要使用ssh凭据,

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

如果希望使用用户名和密码凭证,则需要使用@Serban提到http cloning。

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

fjaof16o5#

对于什么值得添加到讨论中...我做了什么,最终帮助了我...因为管道是在一个docker映像中的工作区中运行的,每次运行时都会清理它。我获取了在管道中的repo上执行必要操作所需的凭据,并将它们存储在一个.netrc文件中。这使我能够成功地授权git repo操作。

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...
    '''
}
6g8kf2rb

6g8kf2rb6#

它为我解决了

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

相关问题