2014-10-19 2 views
1

Мне нужно добавить некоторые разрешения (чтение, сборку, рабочее пространство, отменить и т. Д.), Чтобы пользователь мог использовать множество заданий. Мне интересно, есть ли способ сделать это, используя groovy script вместо того, чтобы делать это вручную.Jenkins Добавить разрешения на работу с использованием groovy

ответ

2

Насколько я знаю, что вы пытаетесь сделать, невозможно.

Ссылка: https://wiki.jenkins-ci.org/display/JENKINS/Matrix-based+security

Я бы рекомендовал использовать «конфигурации нарезку», если есть изменения, которые вы хотите применить к несколько заданий одновременно.

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

, но я не думаю, что права являются частью конфигурации нарезка в любом случае.

+0

Так что нет способа сделать это, используя скрипт – user3502786

+0

nope - я не знаю, извините. –

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» является разрешение струна лет u может взять из xml-файла с установленными разрешениями

1

Я пробовал вышеуказанные решения, и они почти работал. Все мои попытки привели к появлению текущих разрешений в памяти, отражающих новые настройки, но эти разрешения не были сохранены в файле config.xml, поэтому, когда Jenkins был перезапущен, разрешения были потеряны. Опираясь на решения Эндрю Hura, я придумал этот код, который работает через рестарта:

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() 

Более интересная часть, если вам нужно объединить разрешения.
Вы также можете найти пример в приведенной выше ссылке.

Смежные вопросы