特定のユーザーにいくつかの権限 (読み取り、ビルド、ワークスペース、キャンセルなど) を多くのジョブに追加する必要があります。手動で行うのではなく、groovy スクリプトを使用してそれを行う方法があるのではないかと思っています。
6 に答える
私の知る限り、あなたがやろうとしていることは不可能です。
リンク: https://wiki.jenkins-ci.org/display/JENKINS/Matrix-based+security
複数のジョブに同時に適用したい変更がある場合は、「構成スライシング」を使用することをお勧めします。
https://wiki.jenkins-ci.org/display/JENKINS/Configuration+Slicing+Plugin
とにかく、アクセス許可が構成スライスの一部であるとは思いません。
上記の解決策を試しましたが、ほとんど機能しました。私の試みはすべて、新しい設定を反映した現在のメモリ内のアクセス許可をもたらしましたが、それらのアクセス許可は config.xml に保存されていなかったため、Jenkins を再起動するとアクセス許可が失われました。Andrew 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))
execute system groovy ステップを使用して、次のようなスクリプトを実行できます。
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, "your.email@here.com")
}
println("the permissions after update: ${autToUpdate.getGrantedPermissions()}" )
(別のジョブから読み取らずに許可オブジェクトを取得する方法がわかった場合は、更新してください)
Have a look a the script here: https://github.com/MovingBlocks/GroovyJenkins/blob/master/src/main/groovy/ChangeSecurityPerJob.groovy
You should be able to pull parts of it out to do what you want, kinda like this.
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()
The more interesting part is if you need to merge the permissions.
You can find example for that in the above link as well.
私の解決策は、次のグルーヴィーなスクリプトです。
import hudson.model.*
import jenkins.security.*
import hudson.security.*
def jobNames = []
hudson.model.Hudson.instance.getView('VIEW_NAME').items.each() {
jobNames.add(it.fullDisplayName)
}
def userIDs = ['user1_ID','user2_ID', 'user3_ID']
// For each project
for(item in Hudson.instance.items) {
for(jobName in jobNames){
if(item.name.equalsIgnoreCase(jobName))
{
println(item.name)
for(userID in userIDs){
User user = User.getOrCreateByIdOrFullName(userID)
String sID = user.getId() ;
def authorizationMatrixProperty = item.getProperty(AuthorizationMatrixProperty.class)
authorizationMatrixProperty?.add(hudson.model.Item.CANCEL, sID)
authorizationMatrixProperty?.add(Item.WORKSPACE, sID);
authorizationMatrixProperty?.add(Item.BUILD, sID);
authorizationMatrixProperty?.add(Run.DELETE, sID);
authorizationMatrixProperty?.add(Run.UPDATE, sID);
authorizationMatrixProperty?.add(Item.CONFIGURE, sID);
authorizationMatrixProperty?.add(Item.DELETE, sID);
authorizationMatrixProperty?.add(Item.READ, sID);
authorizationMatrixProperty?.add(com.cloudbees.plugins.credentials.CredentialsProvider.VIEW, sID);
item.addProperty(authorizationMatrixProperty)
item.save()
}
}
}
}
ビューの下で権限を変更したいジョブがある場合に機能します。それ以外の場合は、ジョブの名前でリストを作成できます。