Если вы используете Stash в качестве мерзавца сервера вы можете использовать Groovy, чтобы проверить путь вашей фиксации для запуска определенных модулей.
в вашей задании выберите «Подготовьте среду для запуска» и вставьте скрипт ниже «Оцененный скрипт Groovy». Когда скрипт закончит вы можете использовать логические значения окружения, чтобы проверить, есть ли изменения в каждом модуле:
$ {project_1_CHANGED} == TRUE -> Run логика
$ {project_2_CHANGED} == истинные -> Run логика
$ {project_3_CHANGED} == TRUE -> Run логика
Я также хотел бы предложить использовать Multijob плагин, если проекты не связаны между собой.
import groovy.json.JsonSlurper
import hudson.model.*
println "="*90
println "="*35 + " Script Started " + "="*35
println "="*90
def project_1_PATH = """project_1/"""
def project_2_PATH = """project_2/"""
def project_3_PATH = """project_3/"""
def project_1_CHANGED = false
def project_2_CHANGED = false
def project_3_CHANGED = false
def slurper = new JsonSlurper()
// get current thread/Executor and current build
def thr = Thread.currentThread()
def build = thr?.executable
//Get from Env
def stashServer= build.parent.builds[0].properties.get("envVars").find {key, value -> key == 'Stash_Server_HTTP'}
//Get from Job Params
def branch= "Branch"
def resolver = build.buildVariableResolver
def latest_branch = resolver.resolve(branch)
println "param ${branch} value : ${latest_branch}"
println "Stash Server : ${stashServer.value}"
// get latest push user's email address
new_command = """curl -u User:Password -X GET -H "Content-Type: application/json" ${stashServer.value}/rest/api/1.0/projects/${repository}/compare/changes?from=${latest_branch}&to=master&limit=5000"""
proc = new_command.execute()
println "Sleeping for 10 seconds..."
sleep(10000)
// proc.waitFor()
println "Finished getting changes"
def result_changes = proc.in.text
def parse_changes_string = result_changes.substring(result_changes.indexOf("{"))
def latest_changes_json = slurper.parseText(parse_changes_string)
def change_list = latest_changes_json.values
def changed_files_list = []
println "\nThese are the files that were changed: \n"
for (changedFile in change_list)
{
changed_files_list.add(changedFile.path.toString)
println changedFile.path.toString
}
for(oneFilePath in changed_files_list){
if(oneFilePath.contains(project_1_PATH)){
project_1_CHANGED = true }
else if(oneFilePath.contains(project_2_PATH)){
project_2= true }
else if(oneFilePath.contains(project_3_PATH)){
project_3_CHANGED = true}
}
def result_map = [:]
result_map.put('project_1_CHANGED',project_1_CHANGED)
result_map.put('project_2_CHANGED',project_2_CHANGED)
result_map.put('project_3_CHANGED',project_3_CHANGED)
println "="*90
println "="*35 + " Script Ends " + "="*35
println "="*90
return result_map
Могу ли я спросить, почему вы не создаете 3 отдельных репозитория? – hfm
См. Также http://stackoverflow.com/q/17310959/32453 – rogerdpack