0

JOB の下に次のスクリプトがあります。実行すると、userId がスレーブのラベルに追加されます。

import jenkins.model.Jenkins
import hudson.model.User
import hudson.security.Permission
import hudson.EnvVars

EnvVars envVars = build.getEnvironment(listener);

def userId= envVars .get('BUILD_USER_ID')
def nodeName= envVars .get('NODE_NAME')
def nodeOffpool= envVars .get('NODE_GOING_OFFPOOL')

allUsers = User.getAll()
println allUsers
println ""

// add userid as a label if doesnot exist
for (slave in hudson.model.Hudson.instance.slaves) {
  if( slave.nodeName.equals(nodeOffpool)) {

  def labelList = (slave.getLabelString()).split()
  println labelList
  // check for user access to machine
  for(label in labelList) {
       println (User.get(label))
       println (User.get(label) in allUsers)
       if (User.get(label) in allUsers) {
            if (label == userId) {
                 println ("This Node has already been assigned to you ($userId)")
            } else {
                 println ("This Node($nodeOffpool) has already been assigned to someone($label) else, you cannot use it now")
                 println ("Please ask the user $label  to release the Node($nodeOffpool)  for you($label) to run")
            }
            return
       }
  };
  println ("before: " + slave.getLabelString())
  // setting the slave with new label
  String newLabel = slave.getLabelString() + " " + userId 
  slave.setLabelString(newLabel)
  println ("after: " + slave.getLabelString())
  }
}

初めて実行すると、出力は問題ないように見えます

[user1, user2, SYSTEM, unknown]
[TESTLAB3, TESTLAB4]
TESTLAB3
false
TESTLAB4
false
before: TESTLAB3 TESTLAB4
after: TESTLAB3 TESTLAB4 user1

2回目に走るとき

[user1, user2, SYSTEM, unknown, TESTLAB3, TESTLAB4]
[TESTLAB3, TESTLAB4, user1]
TESTLAB3
true
This Node(node1) has already been assigned to someone(TESTLAB3) else, you cannot use it now
Please ask the user TESTLAB3  to release the Node(node1)  for you(TESTLAB3) to run
Finished: SUCCESS

この問題は Jenkins API にありますか。私はジェンキンス1.573を使用しています

関連する質問:

  1. Groovy スクリプトを使用して Jenkins の管理者を識別する方法
  2. ジェンキンスは要求に応じてラベルを変更します

更新しました:

試行錯誤で答えを見つけました。

User.get(label)

デフォルトで存在しない場合、ラベルをユーザーとして追加します。この追加を防ぐには、使用する必要があります

User.get(label, false)
4

1 に答える 1