2015-05-18 14 views
0

工作我用下面的代碼片段在Jenkins plugin檢索作業列表清單:不完整的使用getAllItems API調用

SecurityContext old = ACL.impersonate(ACL.SYSTEM); 
for (AbstractProject<?, ?> job : Jenkins.getInstance() 
         .getAllItems(AbstractProject.class)) { 

// useful work on jobs 

} 
SecurityContextHolder.setContext(old); 

不幸的是,並非所有的工作都是通過循環處理,根據詹金斯日誌。 我有Maven和FreeStyle作業,只有其中一些被丟棄。根據類層次結構,過濾器「AbstractProject.class」應該返回所有內容。 有人能指出文檔或我失蹤的東西嗎?由於通過提前

+0

也許你應該考慮在其中用戶運行該插件。可能該用戶的權利不足? – stanjer

+0

沒錯。我更新了片段:我使用模擬在SYSTEM標識下運行 – Arcadien

回答

0

修正的bug與循環的重構:

SecurityContext old = ACL.impersonate(ACL.SYSTEM); 
for (AbstractProject<?, ?> job : Jenkins.getInstance() 
         .getAllItems(AbstractProject.class)) { 

// useful work on jobs 

} 
SecurityContextHolder.setContext(old); 

有:

ACL.impersonate(ACL.SYSTEM, new Runnable() { 

        @Override 
        public void run() { 

         for (AbstractProject<?, ?> job : Jenkins.getInstance() 
           .getAllItems(AbstractProject.class)) { 

          try { 

           processJob(job, remote, scm); 

          } catch (Exception jobProcessingException) { 
           LOGGER.severe("Something bad occured processing job " 
             + job.getName()); 
           jobProcessingException.printStackTrace(); 
          } 

         } 
        } 
       });