web-dev-qa-db-ja.com

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

私はこのチュートリアルをフォローしていました:

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

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

私は試してみました:

git([url: '[email protected]: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.

クレジットをパイプラインで構成する方法はありますか?それとも、JenkinのLinuxユーザーの.ssh/authorized_keysファイルにSSHキーを配置する必要がありますか?

理想的には、パイプラインジョブとリポジトリキーのリポジトリを用意してからDocker Jenkinsを起動し、これらのジョブとキーをJenkinsコンソールで何も設定せずに動的に追加します。

62
Render

パイプラインでは次のものを使用できます。

git branch: 'master',
    credentialsId: '12345-1234-4696-af25-123455',
    url: 'ssh://[email protected]:company/repo.git'

SshのURLを使用している場合、認証情報はユーザー名+秘密鍵でなければなりません。 sshの代わりにhttpsクローンのURLを使用している場合は、資格情報はusername + passwordになります。

106

Ssh認証情報を使いたい場合は、

  git(
       url: '[email protected]<repo_name>.git',
       credentialsId: 'xpc',
       branch: "${branch}"
    )

ユーザ名とパスワードの認証情報を使用したい場合は、@ Serbanで述べたようにhttpクローンを使用する必要があります。

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

特定の資格情報を使用して明示的にチェックアウトする

    stage('Checkout external proj') {
        steps {
            git branch: 'my_specific_branch',
                credentialsId: 'my_cred_id',
                url: 'ssh://[email protected]/proj/test_proj.git'

            sh "ls -lat"
        }
    }

現在のJenkins Jobに設定されている資格情報に基づいてチェックアウトするには

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

1つのJenkinsファイル内で両方の段階を使用できます。

9
Upul Doluweera

Gitプラグイン GitSCM を使用した簡単な例を追加します。

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

あなたのパイプラインで

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

これは私のための作業です。jenkinsスクリプトで100%

stage('Checkout external proj') {
    steps {
        git branch: 'my_specific_branch',
            credentialsId: 'my_cred_id',
            url: 'ssh://[email protected]/proj/test_proj.git'

        sh "ls -lat"
    }
}
0
Dulip Chandana

ディスカッションに追加する価値のあること...私がしたことが私の役に立つことになりました...パイプラインは、実行のたびにクリーンアップされるdockerイメージ内のワークスペース内で実行されるので。私は自分のパイプライン内のリポジトリで必要な操作を実行するために必要な資格情報を取得し、それらを.netrcファイルに保存しました。これにより、Gitリポジトリ操作を正常に承認できました。

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...
    '''
}
0
madeyejm