2016-11-15 2 views
2

У меня есть трубопровод Дженкинс, глядя, как этотИспользование заначки в трубопроводе Дженкинс без узла

stage 'build app' 
build 'app-build' 
stash 'app-stash' 

stage 'build container' 
unstash 'app-stash' 
build 'container-build' 

сборку app-build и container-build получить новые узлы из системы Kubernetes.

С stash Я хочу передать артефакты от app-build до container-build.

Однако при выполнении этого трубопровода следующее сообщение об ошибке:

[Pipeline] stash 
Required context class hudson.FilePath is missing 
Perhaps you forgot to surround the code with a step that provides this, such as: node 
[Pipeline] End of Pipeline 
org.jenkinsci.plugins.workflow.steps.MissingContextVariableException: Required context class hudson.FilePath is missing 
    at org.jenkinsci.plugins.workflow.steps.StepDescriptor.checkContextAvailability(StepDescriptor.java:254) 
    at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:179) 

Я не хочу использовать node в моем трубопроводе, так как у меня только один исполнитель на моих узлах. Можно ли использовать stash без директивы node?

+0

Для того, бездействует, он может запускать несколько на одном исполнителе. – Rik

ответ

0

Используя сборку, вы создаете внешнее задание. Однако вы не можете использовать «stash» для копирования вещей из одной работы в другую.

Вам нужно либо архивировать артефакты внутри «app-build», либо копировать их с помощью плагина aritfact, или вам нужно переместить контент из «app-build» в сам конвейер. При этом вам понадобится контекст узла, необходимый для приставки.

Btw: Unstash требует контекста узла, а также хочет скопировать файлы где-нибудь.

1

Вы можете использовать stash/unstash для совместного использования файлов/данных между несколькими заданиями в одном конвейере.

node { 
    stage ('HostJob') 
    { 
     build 'HostJob' 
     dir('/var/lib/jenkins/jobs/Hostjob/workspace/') { 
     sh 'pwd' 
     stash includes: '**/build/fiblib-test', name: 'app' 
     } 
    } 

     stage ('TargetJob') { 
      dir("/var/lib/jenkins/jobs/TargetJob/workspace/") { 
      unstash 'app' 
      build 'Targetjob' 
     } 
} 

Таким образом, вы всегда можете скопировать файл/exe/data из одного задания в другое. Эта функция в плагине конвейера лучше, чем Artifact, поскольку она сохраняет только данные локально. Артефакт удаляется после сборки (помогает в управлении данными).

Невозможно использовать штамп без узла. :(

+0

Что вы подразумеваете под «Невозможно использовать сташ без узла. :(»? Можете ли вы уточнить? Я запустил его. Может быть, это связано с этим: https : //stackoverflow.com/questions/43942073/unstash-is-not-putting-anything-in-the-next-step-of-jenkins-pipeline – aholbreich

Смежные вопросы