TL;DR
Опитвате се да използвате артефакти, без първо да ги архивирате.
Опитвате се да използвате абсолютни пътеки, но те трябва да са относителни към $WORKSPACE
и/или „архивно местоположение“.
Пълен отговор
Вие разбирате погрешно концепцията за "Артефакти", свързана с Дженкинс.
Какво представляват артефактите на Дженкинс
Артефактите са файлове, които са специално запазени след изграждането с помощта на действието Архивиране на артефактите след изграждането.
Когато компилацията се изпълнява, тя работи в рамките на:
$WORKSPACE
, което във файловата система обикновено се намира в рамките на
$JENKINS_HOME/jobs/$JOB_NAME/workspace
Вътре там можете да имате вашите папки за плащане на SCM, файлове за временна компилация, окончателни компилирани файлове, двоични файлове и т.н.
Съдържанието на $WORKSPACE
е нестабилно, никога не трябва да разчитате на него извън времевата рамка за компилация (а задачите надолу по веригата са извън времевата рамка за компилация). Съдържанието на $WORKSPACE
може да е различно между различните главни/подчинени възли, то може да бъде изтрито по всяко време от администратора или от SCM актуализация/почистване/чекиране.
Също така е важно да разберете, че има само един $WORKSPACE
за цялата работа.
Но сега обърнете внимание на вашата История на компилациите, има няколко записа в този списък, посочени с номер на компилация (#) и клеймо за дата и час. Те се съхраняват под:
$JENKINS_HOME/jobs/$JOB_NAME/builds/$BUILD_ID
като $BUILD_ID
е клеймото за дата и час на компилацията, като 2014-10-22_11-33-46
$WORKSPACE
съдържа информация, свързана с текущата или последната (и проблемът е: никога не можете да сте сигурни дали е „текуща“ или „последна“) компилация;
Папката builds
съдържа запис на всички минали (запазени) изпълнения на компилации (това съставлява списъка История на компилации отляво), на компилация силен>.
По подразбиране той съдържа само това, от което се нуждае самият Дженкинс: копие на build.xml, информация за регистър на промените, регистрационен файл на конзолата. Когато отидете на URL http://$JENKINS_URL/job/$JOB_NAME/[nn]/
, където [nn]
е числов номер за изграждане/изпълнение на задача (#), той чете тази информация от папката builds
във файловата система.
За да запазите артефактите на дадена компилация (за да избегнете презаписването им от следващата компилация, изтриването на работното пространство или просто за достъп до по-стари компилации), трябва да Архивирате артефактите (със същото действие след компилацията с същото заглавие). Когато архивирате артефактите, вие посочвате кои файлове в $WORKSPACE
искате да запазите. Когато Дженкинс извърши архивирането, той ще постави тези файлове (запазвайки пътеките [спрямо $WORKSPACE
] запазени) в:
$JENKINS_HOME/jobs/$JOB_NAME/builds/$BUILD_ID/archive/
.
По този начин можете да имате множество набори от артефакти, запазени за предишни компилации, а не само за „най-новите /последно“ от $WORKSPACE
.
За пълнота ще спомена, че "постоянните връзки" на Дженкинс, като http://$JENKINS_URL/job/$JOB_NAME/lastSuccessfulBuild
и /lastFailedBuild
и т.н., всъщност са символни връзки във файловата система към една от запазените builds/$BUILD_ID
папки.
И накрая, вие контролирате колко изпълнения на компилации и колко артефакти се запазват (могат да бъдат конфигурирани отделно) чрез отметката „Изхвърляне на стари компилации“ в конфигурацията на заданието. По подразбиране всички се запазват, но ако започнете да запазвате артефакти, трябва да помислите за капацитета на пространството на твърдия диск.
Решения на вашия проблем
И така, с информацията по-горе и разглеждайки вашите съобщения за грешка, сега трябва да видите, че плъгинът Копиране на артефакти правилно търси артефакти в секцията /archive/
на компилация.
Трябва също така да забележите, че плъгинът Копиране на артефакти не ви позволява да изберете „текуща компилация“, когато избирате от коя компилация да копирате. Има постоянни връзки (като „последна успешна“ или „последна компилация“) и конкретни номера на компилации, всички от които се превеждат като запазени компилации под $JENKINS_HOME/jobs/$JOB_NAME/builds/$BUILD_ID/archive/
Дори „Изграждане нагоре по веригата, което задейства тази задача“ ще се свърже към конкретен $BUILD_ID
.
Във всяка от опциите по-долу
Конфигурацията за Архивиране на артефакти е свързана с $WORKSPACE
.
Конфигурацията за Копиране на артефакти е свързана с „архивно местоположение“, което е $JENKINS_HOME/jobs/$JOB_NAME/builds/$BUILD_ID/archive/
.
От „Копиране на артефакти“ е спрямо „архивно местоположение“, а „архивно местоположение“ е спрямо $WORKSPACE
, тогава за всички интензивни цели относителните пътища на двете конфигурации могат да бъдат еднакви и спрямо $WORKSPACE
Опция 1
- First Archive the Artifacts with the post-build action, otherwise you have nothing to copy from.
- If you have your files in the root of
$WORKSPACE
, it should be:
PROJECTNAME-*/**/*.jar,PROJECTNAME-*/**/*.zip
(Note, not full paths in here)
- Then use
Upstream Build that triggered this job
for Copy Artifacts selection.
- For Artifacts to copy field use either:
**
or blank to copy all archived artifacts, or
PROJECTNAME-*/**/*.jar,PROJECTNAME-*/**/*.zip
(същото като секцията за архивиране)
Вариант 2
Ако не искате да архивирате, можете да използвате $WORKSPACE
директно с Copy from workspace of latest completed build
, все пак трябва да се уверите, че нито една втора компилация нагоре не може да се изпълнява, докато се изпълнява компилация надолу по веригата, в противен случай рискувате да получите частичен файл от частично изграждане, тъй като, както беше обяснено по-горе, $WORKSPACE
е непостоянен.
- Отново, за стъпката Копиране на артефакти под полето Артефакти за копиране използвайте път спрямо
$WORKSPACE
, който е:
PROJECTNAME-*/**/*.jar,PROJECTNAME-*/**/*.zip
Вариант 3
Ако наистина искате да копирате цялото РАБОТНО ПРОСТРАНСТВО между различни задачи, използвайте едно от двете
person
Slav
schedule
23.10.2014
$WORKSPACE
или към архивирано местоположение - person Slav   schedule 23.10.2014