TeamCity: добавление BuildStep для запуска внешнего скрипта BuildAgent-ом

Автор: | 09/11/2013

teamcity_logoВ одном из проектов после выполнения clean install Maven-ом необходимо выполнить внешний скрипт, который деплоит файлы проекта в каталог Tomcat-а.

Рассмотрим шаг запуска внешнего скрипта в TeamCity.

Скрипт выполняется BuildAgent-ом, в данном случае – на машине с Windows (хотя сам сервер TeamCity работает под CentOS – но это роли не играет).

Переходим в настройки проекта, Configuration Steps > Build Steps и нажимаем Add build step:

TeamCity: запуск внешнего скрипта

Выбираем Runner type – Command line:

TeamCity: запуск внешнего скрипта

Заполняем поля:

TeamCity: запуск внешнего скрипта

В данном примере:

Execute step: запускать файл deploy.bat в случае если все предыдущие шаги были выполнены успешно;

Run: исполняемый файл (внешний); можно выбрать Run: Custom script: и вписать код в поле:

TeamCity: запуск внешнего скрипта

Command executable: – сам скрипт, который необходимо выполнить.

В этом примере будет вполняться скрипт deploy.bat, о котором упоминалось в статье Windows: bat-файл для остановки Tomcat с помощью taskkill.

При создании скриптов необходимо учитывать тот факт, что они будут выполняться из директории, в которую делался checkout перед запуском билда. Можно указать другую, заполнив поле Working directory.

Сохраняем настройки и получаем новый build-step:

TeamCity: запуск внешнего скрипта

Ещё один немаловажный момент – это использование переменных в скриптах. Переменные окружения можно задать в самой системе – но тогда потребуется перезапустить BuildAgent, что бы он их применил.

Другой вариант – определить их в Step 7 – Build Parameters:

TeamCity: запуск внешнего скрипта

Теперь пора запустить билд и посмотреть лог выполнения:

[12:30:13]Step 2/2: Command Line (1m:31s)
[12:30:14][Step 2/2] Starting: C:OptTomcatsapache-tomcat-6.0.37_clear_installstartdeploy.bat
[12:30:14][Step 2/2] in directory: C:BuildAgentworkf09ebd51e34c758
[12:30:18][Step 2/2]
[12:30:18][Step 2/2] C:BuildAgentworkf09ebd51e34c758>set CURR_DIR=C:BuildAgentworkf09ebd51e34c758
[12:30:18][Step 2/2]
[12:30:18][Step 2/2] C:BuildAgentworkf09ebd51e34c758>set CATALINA_HOME=C:OptTomcatsapache-tomcat-6.0.37_clear_install
[12:30:18][Step 2/2]
[12:30:18][Step 2/2] C:BuildAgentworkf09ebd51e34c758>echo C:BuildAgentworkf09ebd51e34c758
[12:30:18][Step 2/2] C:BuildAgentworkf09ebd51e34c758
[12:30:18][Step 2/2]
[12:30:18][Step 2/2] C:BuildAgentworkf09ebd51e34c758>echo C:OptTomcatsapache-tomcat-6.0.37_clear_install
[12:30:18][Step 2/2] C:OptTomcatsapache-tomcat-6.0.37_clear_install
[12:30:18][Step 2/2]
[12:30:18][Step 2/2] C:BuildAgentworkf09ebd51e34c758>call C:OptTomcatsapache-tomcat-6.0.37_clear_installstart_config_.bat
[12:30:18][Step 2/2]
[12:30:18][Step 2/2] C:BuildAgentworkf09ebd51e34c758>set ENV=AUTO
[12:30:18][Step 2/2]
[12:30:18][Step 2/2] C:BuildAgentworkf09ebd51e34c758>set LOG4J=C:OptTomcatsapache-tomcat-6.0.37_clear_installstartlog4j.xml
[12:30:18][Step 2/2]
[12:30:18][Step 2/2] C:BuildAgentworkf09ebd51e34c758>set OUTPUT_DIR=.
[12:30:18][Step 2/2]
[12:30:18][Step 2/2] C:BuildAgentworkf09ebd51e34c758>set JAVA_HOME=C:Optjdk1.6.0_32x64
[12:30:18][Step 2/2]
[12:30:18][Step 2/2] C:BuildAgentworkf09ebd51e34c758>set JRE_HOME=C:Optjdk1.6.0_32x64jre
[12:30:18][Step 2/2]
[12:30:18][Step 2/2] C:BuildAgentworkf09ebd51e34c758>set JAVA_OPTS=-Xmx5024m -Xms512m -XX:MaxPermSize=2024m
[12:30:18][Step 2/2]
[12:30:18][Step 2/2] C:BuildAgentworkf09ebd51e34c758>set CURR_DIR=C:BuildAgentworkf09ebd51e34c758
[12:30:18][Step 2/2]
[12:30:18][Step 2/2] C:BuildAgentworkf09ebd51e34c758>type NUL 1>tomcatpid.txt
[12:30:18][Step 2/2]
[12:30:18][Step 2/2] C:BuildAgentworkf09ebd51e34c758>tasklist /v /FI “IMAGENAME eq java.exe” | findstr /i “Tomcat” 1>tomcatpid.txt
[12:30:20][Step 2/2]
[12:30:20][Step 2/2] C:BuildAgentworkf09ebd51e34c758>for /F “TOKENS=2” %a in (‘type tomcatpid.txt’) do (taskkill /PID %a )
[12:30:20][Step 2/2]
[12:30:20][Step 2/2] C:BuildAgentworkf09ebd51e34c758>(taskkill /PID 4996 )
[12:30:20][Step 2/2] SUCCESS: Sent termination signal to the process with PID 4996.
[12:30:20][Step 2/2]
[12:30:20][Step 2/2] C:BuildAgentworkf09ebd51e34c758>del tomcatpid.txt
[12:30:20][Step 2/2]
[12:30:20][Step 2/2] C:BuildAgentworkf09ebd51e34c758>rmdir /S /Q C:OptTomcatsapache-tomcat-6.0.37_clear_installwebappsROOT
[12:30:49][Step 2/2]
[12:30:49][Step 2/2] C:BuildAgentworkf09ebd51e34c758>mkdir C:OptTomcatsapache-tomcat-6.0.37_clear_installwebappsROOT
[12:30:49][Step 2/2]
[12:30:49][Step 2/2] C:BuildAgentworkf09ebd51e34c758>for / %d in (C:BuildAgentworkf09ebd51e34c758app-webtargetapp-web-*) do (xcopy /S /E %d* C:OptTomcatsapache-tomcat-6.0.37_clear_installwebappsROOT )
[12:30:49][Step 2/2]
[12:30:49][Step 2/2] C:BuildAgentworkf09ebd51e34c758>(xcopy /S /E C:BuildAgentworkf09ebd51e34c758app-webtargetapp-web-**.*** C:OptTomcatsapache-tomcat-6.0.37_clear_installwebappsROOT )
[12:30:49][Step 2/2] C:BuildAgentworkf09ebd51e34c758app-webtargetapp-web-**.**logout.jsp
[12:31:44][Step 2/2] 2321 File(s) copied
[12:31:44][Step 2/2]
[12:31:44][Step 2/2] C:BuildAgentworkf09ebd51e34c758>call C:OptTomcatsapache-tomcat-6.0.37_clear_installbinstartup.bat
[12:31:44][Step 2/2] Using CATALINA_BASE: “C:OptTomcatsapache-tomcat-6.0.37_clear_install”
[12:31:44][Step 2/2] Using CATALINA_HOME: “C:OptTomcatsapache-tomcat-6.0.37_clear_install”
[12:31:44][Step 2/2] Using CATALINA_TMPDIR: “C:OptTomcatsapache-tomcat-6.0.37_clear_installtemp”
[12:31:44][Step 2/2] Using JRE_HOME: “C:Optjdk1.6.0_32x64jre”
[12:31:44][Step 2/2] Using CLASSPATH: “C:OptTomcatsapache-tomcat-6.0.37_clear_installbinbootstrap.jar”
[12:31:44][Step 2/2] Process exited with code 0