2016-07-06 15 views
6

Tôi đã triển khai đường ống dưới dạng mã docker demo with multibranch.Làm cách nào để hạn chế người dùng có thể chạy kiểm tra jenkinsfile trong các yêu cầu kéo?

Nó hoạt động ổn. Tôi đã thêm tên người dùng github của mình làm tổ chức và khi tôi thực hiện yêu cầu kéo, các thử nghiệm được chạy.

Tuy nhiên, khi một số người dùng khác thực hiện yêu cầu kéo, các thử nghiệm của họ cũng sẽ chạy. Tôi muốn tự phê duyệt các yêu cầu kéo từ các cộng tác viên bên ngoài nào là tốt để chạy trong máy chủ jenkins của tôi. Có cách nào làm được việc này không?

Tôi có thể làm điều đó với ghprb, nhưng không tương thích với đường ống và tôi muốn di chuyển công việc của mình sang đường ống.

+0

tôi tin rằng trường hợp sử dụng này nên được giải quyết bằng cách https://wiki.jenkins.io/display/JENKINS/GitHub+Branch+Source+Plugin hiện nay. – mkobit

Trả lời

-2

hãy thử thêm những dòng này trong kịch bản đường ống của bạn:

node('slaveName') { 

    properties([ 
      parameters([ 
        string(
          defaultValue: '[email protected],[email protected]', 
          description: 'comma separated whitelisted emails', 
          name: 'WHITELIST' 
        ) 
      ]) 
    ]) 

    def authorEmail 

     stage('Git') { 
      authorEmail = sh([ 
        // git log format docs here: https://git-scm.com/docs/pretty-formats 
        script  : "git log -1 --format='%aE'", 
        returnStdout: true 
      ]).trim() 

      boolean allowRun = isWhitelisted(env.WHITELIST, authorEmail) 

      if (allowRun) { 
       echo "email ${authorEmail} is whitelisted, proceed execution" 
      } else { 

       echo "email ${authorEmail} is not in whitelist ${env.WHITELIST}, proceed jenkins job?" 
       input message: 'Proceed?' 
       // or just abort build with non-zero shell exit 
       // currentBuild.result = 'FAILURE' 
       // sh "exit 10" 
      } 

     } 
    } 
} 

@NonCPS 
boolean isWhitelisted(whitelist, email) { 
    def res = whitelist.tokenize(" ,;").find { white -> white == email } 
    return null != res 
} 
+2

Điều này không an toàn. Bạn có thể dễ dàng sử dụng bất kỳ email nào bạn muốn khi thực hiện một cam kết, chưa kể rằng họ chỉ có thể thay đổi hoàn toàn Jenkinsfile trong nhánh của họ để vượt qua kiểm tra này. –

+0

Có lẽ bạn đã đúng. Nhưng nó thực sự có ý nghĩa gì không: hạn chế thay đổi Jenkinsfile cho những người được phép thay đổi mã của bạn? – ludenus

+1

Câu hỏi này là về các yêu cầu kéo trên GitHub. Tác giả yêu cầu kéo không nhất thiết được phép thay đổi mã của bạn. –

Các vấn đề liên quan