В своем конвейере я использую методы readJSON и writeJSON на этапе утилиты конвейера плагин для чтения / записи файлов на этапах конвейера. Для обычного конвейера все работает отлично. Однако, когда я создаю «многоотраслевой конвейер», тот же конвейер не работает. Ошибка происходит, когда последующий этап пытается прочитать файл с помощью readJSON, который должен был быть создан на предыдущем этапе. Любопытно следующее: на одном этапе созданный файл был доступен для использования командой (команда aws ecs register-task-definition
успешно завершена) НО впоследствии не присутствует в рабочем пространстве /var/jenkins_home/workspace/TestPipeline
на узле.
Чтобы сосредоточиться на неудаче, я только вставляю соответствующие этапы конвейера.
stage('RegisterTaskDefinition') {
agent any
steps {
sh 'printenv'
script {
def templateFile = env.TEMPLATE_BASE_PATH +'/' + TASK_DEF_TEMPLATE
def taskDefinitionTemplate = readJSON(file: templateFile)
taskDefinitionTemplate.taskRoleArn = env.TASK_ROLE_ARN
taskDefinitionTemplate.executionRoleArn = env.EXECUTION_ROLE_ARN
taskDefinitionTemplate.containerDefinitions[0].image = "NewImage"
taskDefinitionTemplate.containerDefinitions[0].portMappings[0].containerPort = env.APP_PORT.toInteger()
taskDefFile = env.TEMPLATE_BASE_PATH + '/' + env.TASK_DEFINITION_FILE
writeJSON(file: taskDefFile, json: taskDefinitionTemplate)
def registerTaskDefinitionOutput = sh (
script: "aws ecs register-task-definition --cli-input-json file://${taskDefFile}",
returnStdout: true
).trim()
echo "Register Task Def result: ${registerTaskDefinitionOutput}"
def registerTaskDefOutputFile = env.TEMPLATE_BASE_PATH + '/registerTaskDefOutput.json'
echo "********************************"
sh 'pwd'
writeJSON(file: registerTaskDefOutputFile, json: registerTaskDefinitionOutput, pretty: 2)
echo "********************************${registerTaskDefOutputFile}"
}
}
}
stage('CreateTaskSet') {
agent any
steps{
script{
def registerTaskDefOutputFile = env.TEMPLATE_BASE_PATH + '/' + env.REGISTER_TASK_DEF_OUTPUT
def taskSetTemplateFile = env.TEMPLATE_BASE_PATH + '/' + env.TASK_SET_TEMPLATE_FILE
def taskSetFile = env.TEMPLATE_BASE_PATH + '/' + env.TASK_SET_FILE
def registerTaskDefinitionOutput = readJSON(file: registerTaskDefOutputFile)
def taskSetTemplateJson = readJSON(file: taskSetTemplateFile)
taskSetTemplateJson.taskDefinition = registerTaskDefinitionOutput.taskDefinition.taskDefinitionArn
taskSetTemplateJson.loadBalancers[0].containerPort = env.APP_PORT.toInteger()
taskSetTemplateJson.loadBalancers[0].targetGroupArn = targetGroupArn
writeJSON(file: taskSetFile, json: taskSetTemplateJson, pretty: 2)
}
}
}
Чтобы уточнить, этап RegisterTaskDefinition
завершается успешно, а этап CreateTaskSet
- сбой.
Сгенерированное исключение:
java.io.FileNotFoundException: /var/jenkins_home/workspace/TestPipeline/infrastructure/registerTaskDefOutput.json does not exist.
at org.jenkinsci.plugins.pipeline.utility.steps.json.ReadJSONStepExecution.doRun(ReadJSONStepExecution.java:82)
at org.jenkinsci.plugins.pipeline.utility.steps.AbstractFileOrTextStepExecution.run(AbstractFileOrTextStepExecution.java:32)
at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution.lambda$start$0(SynchronousNonBlockingStepExecution.java:47)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
У меня следующие вопросы:
- Чем объясняется разница в поведении между двумя типами трубопроводов?
- Для обычного конвейера я могу видеть файлы, созданные конвейером, в
/var/jenkins_home/workspace/TestPipeline
на узле. Для «многоотраслевого трубопровода» это не так. Какой каталог использует Дженкинс для «многоотраслевого конвейера»? - Какие журналы помогут мне диагностировать проблему?
Я не могу найти никакой документации, объясняющей эту разницу в поведении двух типов конвейеров. Буду признателен за любые предложения.