P4Groovy is a Groovy interface to P4Java that allows you to write Perforce commands in the pipleline DSL.
To allow P4Groovy code to be executed uncheck the 'Use Groovy Sandbox' checkbox under the Pipeline script.
The setup P4Groovy create a 'p4' object. For example:
// Define workspace
def ws = [$class: 'StreamWorkspaceImpl',
charset: 'none', format: 'jenkins-${JOB_NAME}',
pinHost: false, streamName: '//streams/projAce']
// Create object
def p4 = p4(credential: 'phooey', workspace: ws)
This code can be created for you using the 'p4: P4 Groovy' pipeline syntax snippet generator.
The run command takes a comma separated list of Perforce command and then arguments.
For example:
p4.run('changes', '-m5', '//depot/path/...')
The command will return an array of Maps (specifically Map<String, Object>[]). For example:
def changes = p4.run('changes', '-m5', '//depot/path/...')
You can iterate through the response by iterating through each array item and extracting the keys. For example:
for(def item : changes) {
for (String key : item.keySet()) {
value = item.get(key)
println ("Key: " + key + " Value: " + value)
}
}
To retrieve the contents of a form as a map use 'fetch' providing a 'spec type' and 'spec id'. For example:
def client = p4.fetch(‘client’, ‘my_ws’)
To save the contents of a form use 'save' providing the 'spec type' and spec as a Map. For example:
p4.save(‘client’, client)
For example to update a job description:
def job = p4.fetch('job', 'job000006')
def desc = job.get('Description')
desc = desc + env.BUILD_URL
job.put('Description', desc)
p4.save('job', job)
P4Groovy provides two custom functions:
p4.getUserName() // Get current User name
p4.getClientName() // Get current workspace/client name
# P4Groovy ## Introduction P4Groovy is a Groovy interface to P4Java that allows you to write Perforce commands in the pipleline DSL. ## Setup To allow P4Groovy code to be executed uncheck the 'Use Groovy Sandbox' checkbox under the Pipeline script. The setup P4Groovy create a 'p4' object. For example: // Define workspace def ws = [$class: 'StreamWorkspaceImpl', charset: 'none', format: 'jenkins-${JOB_NAME}', pinHost: false, streamName: '//streams/projAce'] // Create object def p4 = p4(credential: 'phooey', workspace: ws) This code can be created for you using the 'p4: P4 Groovy' pipeline syntax snippet generator. ## Running a command The run command takes a comma separated list of Perforce command and then arguments. For example: p4.run('changes', '-m5', '//depot/path/...') The command will return an array of Maps (specifically Map<String, Object>[]). For example: def changes = p4.run('changes', '-m5', '//depot/path/...') You can iterate through the response by iterating through each array item and extracting the keys. For example: for(def item : changes) { for (String key : item.keySet()) { value = item.get(key) println ("Key: " + key + " Value: " + value) } } ## Working with forms To retrieve the contents of a form as a map use 'fetch' providing a 'spec type' and 'spec id'. For example: def client = p4.fetch(‘client’, ‘my_ws’) To save the contents of a form use 'save' providing the 'spec type' and spec as a Map. For example: p4.save(‘client’, client) For example to update a job description: def job = p4.fetch('job', 'job000006') def desc = job.get('Description') desc = desc + env.BUILD_URL job.put('Description', desc) p4.save('job', job) # Getters P4Groovy provides two custom functions: p4.getUserName() // Get current User name p4.getClientName() // Get current workspace/client name ## Known Limitations * It is not possible to run an interactive resolve with P4Groovy. If a custom resolve is required use 'resolve -n' to display the files that need to be resolved and iterate through the results making changes to the files and resolving as necessary.
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#1 | 23141 | Tsaukpaetra | "Forking branch Main of p4-jenkins to Tsaukpaetra-p4jenkins." | ||
//guest/perforce_software/p4jenkins/main/P4GROOVY.md | |||||
#2 | 22091 | Paul Allen |
Fix Job form issue in P4Groovy. A custom job spec would return an extra field 'specFormatted' normally hidden by the C++ API, but exposed in P4Java's execMap results. P4Groovy needs to remove the field before returning the map to the user. Minor updates to the P4Groovy doc. |
||
#1 | 22061 | Karl Wirth | Documentation for P4Groovy (Beta) |