2014-10-19 92 views

回答

2

據我所知,你所要做的是不可能的。

鏈接:https://wiki.jenkins-ci.org/display/JENKINS/Matrix-based+security

我會建議使用「配置切片」如果你想在同一時間應用到多個作業的變化。

https://wiki.jenkins-ci.org/display/JENKINS/Configuration+Slicing+Plugin

,但我不認爲權限是反正切配置的一部分。

+0

所以沒有辦法使用腳本 – user3502786 2014-10-19 12:43:55

+0

nope - 我不知道一種方式對不起。 – 2014-10-20 08:22:00

1

您可以使用執行系統常規步驟運行就像一個腳本:

import hudson.security.AuthorizationMatrixProperty 

def jobWithPermissionsYouWant = "template-job-name" 
def jobToAddPermissions = "job-to-update-name" 
def jen = Jenkins.getInstance(); 
def templateJob = jen.getItem(jobWithPermissionsYouWant); 


//get permissions from another job (use it as permissions template) 
def autTemplate = templateJob.getProperty(AuthorizationMatrixProperty.class) 
def permissionSetToAdd = autTemplate.getGrantedPermissions() 

//get the authorization matrix property of the job you want to update 
def jobToUpdate = jen.getItem(jobToAddPermissions); 
def autToUpdate = jobToUpdate.getProperty(AuthorizationMatrixProperty.class) 
def currPermissionSet = autToUpdate.getGrantedPermissions() 

//for each permission in the template job, add permission to the job you want to update 
permissionSetToAdd.each{ 

    autToUpdate.add(it.key, "[email protected]") 

} 

println("the permissions after update: ${autToUpdate.getGrantedPermissions()}") 

(如果你弄清楚如何獲得許可對象而不需要從不同的工作閱讀它,請更新)

1

我們並不需要創建新的權限對象,只需要創建新的hudson.security.AuthorizationMatrixProperty:

Jenkins.instance.getItem("JobName") 
    .removeProperty(hudson.security.AuthorizationMatrixProperty) 
Jenkins.instance.getItem("JobName") 
    .addProperty(new hudson.security.AuthorizationMatrixProperty()) 
Jenkins.instance.getItem("JobName") 
    .getProperty(hudson.security.AuthorizationMatrixProperty) 
    .add("hudson.model.Item.Build:DEV") 

其中「hudson.model.Item.Build:DEV」是一個權限字符串喲你可以從xml文件中獲得你需要的配置權限

1

我試過上面的解決方案,他們差不多工作。我所有的嘗試都會導致當前的內存權限反映新的設置,但這些權限並未保存在config.xml中,所以當Jenkins重新啓動時,權限就會丟失。安德魯胡拉的解決方案的基礎上,我想出了這個代碼,跨重新啓動功能:

AbstractProject proj = Hudson.instance.getItem("my_job") 
AuthorizationMatrixProperty authProperty = proj.getProperty(hudson.security.AuthorizationMatrixProperty) 
authProperty.add("hudson.model.Item.Build:DEV") 
Map<Permission, Set<String>> permissionMap = authProperty.getGrantedPermissions() 

proj.removeProperty(hudson.security.AuthorizationMatrixProperty) 
proj.addProperty(new AuthorizationMatrixProperty(permissionMap)) 
1

看看這裏的腳本:https://github.com/MovingBlocks/GroovyJenkins/blob/master/src/main/groovy/ChangeSecurityPerJob.groovy

你應該能夠拉它的部分出做你想做的事,有點像這樣。

AbstractProject proj = Hudson.instance.getItem("YourJob") 
AuthorizationMatrixProperty authProperty = proj.getProperty(AuthorizationMatrixProperty.class) 

Map<Permission,Set<String>> newPermissions = new HashMap<Permission, Set<String>>() 
newPermissions.put(Item.BUILD, users) 

proj.addProperty(new AuthorizationMatrixProperty(newPermissions)) 
proj.save() 

更有趣的部分是如果您需要合併權限。
您也可以在上面的鏈接中找到相應的示例。

相關問題