Kiểm tra Jenkins Pipeline Git SCM với thông tin đăng nhập?


104

Tôi đã làm theo hướng dẫn này :

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

Tuy nhiên, nó không cho biết cách thêm thông tin đăng nhập. Jenkins có phần "Thông tin đăng nhập" cụ thể nơi bạn xác định người dùng & pass của người dùng, sau đó lấy ID để sử dụng trong công việc, nhưng làm cách nào để sử dụng phần đó trong hướng dẫn Pipeline?

Tôi đã thử với:

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

không may mắn:

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.

Có cách nào định cấu hình các khoản tín dụng trong đường dẫn hay tôi phải đặt các khóa SSH vào tệp .ssh / allow_keys của người dùng Linux của Jenkin không?

Trong thế giới lý tưởng, tôi muốn có một kho lưu trữ các công việc đường ống và kho lưu trữ, sau đó khởi chạy Docker Jenkins và tự động thêm các công việc và khóa này vào đó mà không cần phải định cấu hình bất kỳ thứ gì trong Jenkins Console.

Câu trả lời:


161

Bạn có thể sử dụng những điều sau trong một đường dẫn:

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

Nếu bạn đang sử dụng url ssh thì thông tin đăng nhập của bạn phải là tên người dùng + khóa riêng tư. Nếu bạn đang sử dụng url bản sao https thay vì url ssh, thì thông tin đăng nhập của bạn phải là tên người dùng + mật khẩu.


1
Điều đó đã sửa nó, cảm ơn bạn. Tôi không biết rằng SSH-url và HTTPS-url yêu cầu các thông tin đăng nhập khác nhau để hoạt động!
Render

3
nó hữu ích, nhưng credentialsIdxuất phát từ id trong /var/lib/jenkins/credentials.xmlkhi tôi đã phải vật lộn để tìm ra nó.
Prayagupd Ngày

17
@prayagupd, bạn sẽ có thể lấy ID thông tin xác thực từ trang thông tin xác thực ( http://yourjenkinsinstall/credentials). Không cần trawl các tệp cấu hình.
Serban Constantin

4
Đối với những người hỏi "Làm thế nào để tạo một id thông tin đăng nhập". Đây làm thế nào để tìm thấy nó. [1. Nhấp vào Thông tin đăng nhập trên trang chủ Jenkins, 2. Sau đó, bạn sẽ thấy một bảng với tất cả thông tin đăng nhập bạn đã tạo. 3. ID ở trong bảng này]
vincedjango

1
Đối với tôi, nó không thể phân giải URL khi tôi đặt nó bắt đầu bằng ssh://. Loại bỏ nó, sửa chữa nó.
Moshisho

30

Để thanh toán rõ ràng bằng thông tin xác thực cụ thể

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

Để thanh toán dựa trên thông tin đăng nhập đã định cấu hình trong Công việc Jenkins hiện tại

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

Bạn có thể sử dụng cả hai giai đoạn trong một tệp Jenkins.


2
làm thế nào để tạo thông tin đăng nhập này?
không xác định


tôi nên lưu trữ tệp thông tin xác thực ở đâu. jenkins sais: Cảnh báo: Không thể tìm thấy CredentialId "jenkins_key".
Dinu Nicolae

Thông tin đăng nhập @Dinu được tạo trong Jenkins, bạn sẽ thấy nó trong menu chính nếu plugin được cài đặt. support.cloudbees.com/hc/en-us/articles/…
Upul Doluweera

1
cảm ơn bạn! một người đã đăng toàn bộ nội dung thay vì chỉ một chút ở đây và ở đây, và hy vọng mọi người biết một cách kỳ diệu những gì cần đặt cho phần còn lại của nó.

25

Nếu bạn muốn sử dụng thông tin đăng nhập ssh,

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

nếu bạn muốn sử dụng thông tin đăng nhập tên người dùng và mật khẩu, bạn cần sử dụng http clone như @Serban đã đề cập.

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

10
làm thế nào để tạo thông tin đăng nhập này?
không xác định

Tôi đã tạo bằng chứng xác thực như sau: help.github.com/en/articles/… , tôi đã thêm khóa công khai vào git của mình, nhưng tôi phải lưu trữ tệp này ở đâu. Jenkins nói: Cảnh báo: Không thể tìm thấy CredentialId "jenkins_key".
Dinu Nicolae

@DinuNicolae vui lòng tham khảo Adding new global credentials -> 7.tại link sau. jenkins.io/doc/book/using/using-credentials
f-xã hội

14

Thêm cho bạn một ví dụ nhanh bằng cách sử dụng git plugin GitSCM :

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

trong đường ống của bạn

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

bạn có biết cách sử dụng thông tin đăng nhập toàn cầu cho toàn bộ nhóm không? Hoặc có cách nào để bất kỳ nhà phát triển nào đang đẩy lên github, họ có thể cung cấp thông tin đăng nhập của mình mà không cần phải tiết lộ thông tin đó trong Jenkinsfile
henhen

Bạn có thể quản lý cơ chế liên quan đến logic của riêng bạn trong nhóm nhà phát triển và sử dụng các khóa thông tin xác thực khác nhau cho mỗi nhóm. ví dụ: Nếu người dùng Github trong danh sách 'backend_developers' sử dụng <gitCredentialsGroupA>, Nếu người dùng Github trong danh sách 'frontend_developers' sử dụng <gitCredentialsGroupB>, hãy thiết kế cơ chế liên quan đến trường hợp sử dụng của riêng bạn.
avivamg

bạn sẽ giữ những thông tin đăng nhập này ở đâu? Có phải với plugin Jenkins Credentials không?
henhen

Sử dụng tài liệu thông tin xác thực Jenkins - jenkins.io/doc/book/using/using-credentials
avivamg Ngày

1
Tôi đã tìm kiếm xa và rộng cho một checkoutví dụ đơn giản như thế này, cảm ơn bạn.
301_Moved_Permanently

1

Đối với những gì đáng để thêm vào cuộc thảo luận ... những gì tôi đã làm đã giúp tôi ... Vì đường dẫn được chạy trong một không gian làm việc trong hình ảnh docker được dọn dẹp mỗi khi nó chạy. Tôi lấy thông tin đăng nhập cần thiết để thực hiện các thao tác cần thiết trên repo trong đường dẫn của mình và lưu trữ chúng trong tệp .netrc. điều này cho phép tôi cho phép các hoạt động git repo thành công.

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

Nó đã giải quyết cho tôi bằng cách sử dụng

checkout scm: ([
                    $class: 'GitSCM',
                    userRemoteConfigs: [[credentialsId: '******',url: ${project_url}]],
                    branches: [[name: 'refs/tags/${project_tag}']]
            ])
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.