認証情報を使用してJenkins Pipeline Git SCMをチェックアウトしますか?


104

私はこのチュートリアルに従っていました

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

ただし、資格情報を追加する方法はわかりません。Jenkinsには、ユーザーuser&passを定義し、ジョブで使用するためのIDを取得する特定の「Credentials」セクションがありますが、それをパイプラインの指示でどのように使用しますか?

私が試した:

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で何も構成せずにこれらのジョブとキーを動的に追加します。

回答:


161

パイプラインでは以下を使用できます。

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

ssh urlを使用している場合、資格情報はユーザー名+秘密鍵でなければなりません。sshの代わりにhttpsクローンURLを使用している場合、資格情報はユーザー名+パスワードである必要があります。


1
それで直った、ありがとう。SSH-urlとHTTPS-urlを使用するには異なる認証情報が必要であることを知りませんでした!
2016

3
それは役に立ちましたが、それを理解するのに苦労しなければならなかっcredentialsId/var/lib/jenkins/credentials.xmlので、id inから来ています。
prayagupd 2017年

17
@prayagupd、資格情報ページ(http://yourjenkinsinstall/credentials)から資格情報IDを取得できるはずです。設定ファイルをトロールする必要はありません。
セルバンコンスタンタン

4
「credentialsIdを生成する方法」を尋ねる人のため。ここでそれを見つける方法。[1。Jenkinsホームページの[Credentials]をクリックします。2.作成したすべての認証情報の表が表示されます。3. IDはこの表に含まれています]
vincedjango、2018

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ジョブで構成された資格情報に基づいてチェックアウトするには

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

1つのJenkinsファイル内で両方のステージを使用できます。


2
このcredentialIdを生成する方法?
未定義


資格情報ファイルはどこに保存すればよいですか。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}"
    )

ユーザー名とパスワードの資格情報を使用する場合は、@ Serbanで述べたようにhttp cloneを使用する必要があります。

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

10
このcredentialIdを生成する方法?
未定義

次のような資格情報を生成しました: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>を使用し、「frontend_developers」のリストにあるGithubユーザーが<gitCredentialsGroupB>を使用する場合は、独自の使用例に関連するメカニズムを設計します。
avivamg

これらの資格情報はどこに保管しますか?Jenkins Credentialsプラグインを使用していますか?
henhen

Jenkins資格情報ドキュメントを使用する-jenkins.io/doc/book/using/using-credentials
avivamg

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}']]
            ])
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.