使用凭证结帐Jenkins Pipeline Git SCM?


104

我正在关注本教程

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

但是,它没有告诉您如何添加凭据。Jenkins确实有特定的“凭据”部分,您可以在其中定义用户user&pass,然后获取要在作业中使用的ID,但是如何在管道说明中使用它呢?

我尝试了:

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.

有没有一种方法可以配置管道中的凭据,还是必须将SSH密钥放入Jenkin的Linux用户的.ssh / authorized_keys文件中?

在理想的世界中,我想为管道作业和存储库提供一个存储库,然后启动Docker Jenkins,并在其中动态添加这些作业和密钥,而无需在Jenkins Console中进行任何配置。

Answers:


161

您可以在管道中使用以下内容:

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

如果您使用的是ssh网址,则您的凭据必须为用户名+私钥。如果您使用的是https克隆URL而不是ssh,则您的凭据应为用户名+密码。


1
修复了,谢谢。我不知道SSH-URL和HTTPS-URL需要不同的凭据才能使用!
渲染

3
它很有用,但credentialsId来自id in,/var/lib/jenkins/credentials.xml因为我不得不努力弄清楚。
祈祷

17
@prayagupd,您应该能够从凭据页面(http://yourjenkinsinstall/credentials)获取凭据ID 。无需拖曳配置文件。
塞尔维亚君士坦丁

4
对于那些询问“如何生成凭据ID”的人。在这里如何找到它。[1。单击Jenkins主页上的凭据2。然后,您将看到一个包含您创建的所有凭据的表。3. ID在此表中]
vincedjango

1
对我来说,将其设置为以开头时,它无法解析URL ssh://。卸下并固定。
Moshisho

30

使用特定凭证显式结帐

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

根据当前Jenkins Job中配置的凭证进行结帐

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

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


2
如何生成此凭据Id?
未定义的'18


我应该在哪里存储凭证文件。jenkins sais:警告:找不到CredentialId“ jenkins_key”。
Dinu Nicolae

@Dinu凭据是在Jenkins中创建的,如果已安装插件,则应在主菜单中看到它。support.cloudbees.com/hc/en-us/articles/...
Upul Doluweera

1
谢谢!有人把整个事情都发布了,而不仅仅是在这里一点一点地发布,希望人们神奇地知道剩下的东西。

25

如果您想使用ssh凭据,

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

如果要使用用户名和密码凭据,则需要使用http clone @@ Serban。

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

10
如何生成此凭据Id?
未定义的'18

我生成了这样的凭证:help.github.com/en/articles/…,我在git中添加了公钥,但是我必须在哪里存储该文件。Jenkins说:警告:找不到CredentialId“ jenkins_key”。
Dinu Nicolae

@DinuNicolae请参考Adding new global credentials -> 7.以下链接。jenkins.io/doc/book/using/using-credentials
f-society

14

使用git插件GitSCM为您添加一个快速示例:

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

在您的管道中

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

您知道如何为整个团队使用全局证书吗?还是有一种方法,无论开发人员将其推向github,他们都可以提供其凭据,而不必在Jenkinsfile中公开它
henhen

您可以在开发团队中管理与自己的逻辑相关的机制,并为每个组使用不同的凭据密钥。例如:如果某个Github用户在'backend_developers'列表中,请使用<gitCredentialsGroupA>;如果某个Github用户在'frontend_developers'列表中,则使用<gitCredentialsGroupB>,请设计与您自己的用例相关的机制。
avivamg

您将这些凭证保存在哪里?它与Jenkins凭证插件一起使用吗?
henhen


1
我已经在广泛的搜索中找到了一个checkout像这样的简单示例,谢谢。
301_Moved_Permanently

1

对于值得加入讨论的内容...我所做的最终帮助了我...由于管道是在docker映像内的工作空间中运行的,因此每次运行时都会对其进行清理。我获取了在管道中对存储库执行必要操作所需的凭据,并将其存储在.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...
    '''
}

1

它为我解决了

checkout scm: ([
                    $class: 'GitSCM',
                    userRemoteConfigs: [[credentialsId: '******',url: ${project_url}]],
                    branches: [[name: 'refs/tags/${project_tag}']]
            ])
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.