2016-05-10 10 views
0

私は特定のシナリオでユーザーアクセスを制限するアクセス許可を追加するJenkinsプラグインを作成しています。私は現在、ユーザーがプロモートビルドプラグインを使用してビルドをプロモートしたときに、プラグインが期待通りに動作しないバグを抱えています。昇格されたビルドプラグインを使用してどのユーザーがプロモーションを開始したかを確認するにはどうすればよいですか?

2人のユーザー(devuser、adminuser)と2つのジョブ(job-a、job-b)があります。最初に執筆者は仕事-aを構築する。次に、adminuserはjob-aのプロモーションを行い、job-bのビルドをトリガーします。

昇進を介してジョブbがトリガーされると、昇格を実行したユーザーを特定しようとします。私はAbstractBuildの原因を見れば、原因はnullで、原因devuserなくadminユーザーあるUpstreamCauseを持っています。

昇格を引き起こしたユーザーを特定するにはどうすればよいですか? job-aのUIでプロモーションを見ると、adminuserがプロモーションを開始したことがわかります。私はJenkinsプラグインのビルドのために実行されたプロモーションのリストをどのように入手できるか分かりません。

ありがとうございます!

+0

を取得するチェック私は私が見て言及する必要があります[昇格プラグインのwikiのビルド](https://でのwiki.jenkins-ci.org/display/JENKINS/Promoted+Builds+Plugin)を参照してください。これらの環境変数は、中間 'PromotionProcess'ビルドでのみ利用可能であるように見え、__job-b__では利用できません – RainierWolf

答えて

0

完璧ではありませんが、私は私の問題を解決する解決策を思いつきました。

プロモーションビルドがスケジュールされるので、プロモーションが属するビルドとプロモーションをトリガしたユーザーを追跡します。下流のジョブがスケジュールされている場合

if (build.getClass() == Promotion.class) { 
    Promotion promotion = (Promotion) build; 
    RECENTLY_PROMOTED.put(getBuildId(promotion.getRootBuild()), promotion.getUserName()); 
    return new User(promotion.getUserName()); 
} 

、私は最近、ビルドIDの推進、およびユーザー

UpstreamCause upstreamCause = (UpstreamCause) cause; 
String upstreamBuildId = String.format("%s#%s", upstreamCause.getUpstreamProject(), upstreamCause.getUpstreamBuild()); 

if (RECENTLY_PROMOTED.containsKey(upstreamBuildId)) { 
    String promotedUser = RECENTLY_PROMOTED.get(upstreamBuildId); 
    RECENTLY_PROMOTED.remove(upstreamBuildId); 
    return new User(promotedUser); 
} 
関連する問題