Мне нужно добавить некоторые разрешения (чтение, сборку, рабочее пространство, отменить и т. Д.), Чтобы пользователь мог использовать множество заданий. Мне интересно, есть ли способ сделать это, используя groovy script вместо того, чтобы делать это вручную.Jenkins Добавить разрешения на работу с использованием groovy
ответ
Насколько я знаю, что вы пытаетесь сделать, невозможно.
Ссылка: https://wiki.jenkins-ci.org/display/JENKINS/Matrix-based+security
Я бы рекомендовал использовать «конфигурации нарезку», если есть изменения, которые вы хотите применить к несколько заданий одновременно.
https://wiki.jenkins-ci.org/display/JENKINS/Configuration+Slicing+Plugin
, но я не думаю, что права являются частью конфигурации нарезка в любом случае.
Вы можете использовать выполнить систему заводной шаг, чтобы запустить сценарий, как:
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()}")
(если вы выяснить, как получить объект разрешения, не читая его с другой работой, пожалуйста, обновите)
Нам не нужно, чтобы создать новый объект разрешения, просто создать новый 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-файла с установленными разрешениями
Я пробовал вышеуказанные решения, и они почти работал. Все мои попытки привели к появлению текущих разрешений в памяти, отражающих новые настройки, но эти разрешения не были сохранены в файле 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))
взглянуть на сценарий здесь: 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()
Более интересная часть, если вам нужно объединить разрешения.
Вы также можете найти пример в приведенной выше ссылке.
Так что нет способа сделать это, используя скрипт – user3502786
nope - я не знаю, извините. –