Как я могу заставить Дженкинса выполнить скрипт, который он вытащил из Git?


12

Я использую Jenkins для запуска и управления серией заданий на импорт. Я хочу поместить свой скрипт импорта в Github, и когда Дженкинс создаст задание, он должен (а) вытащить этот контролируемый версией скрипт из Github и (б) запустить скрипт.

Проблема, с которой я сталкиваюсь, заключается в том, что я не знаю, как ссылаться на имя скрипта для запуска в задании. Я предполагаю, что исходный код помещается в каталог рабочей области. Это предположение верно? (Если бы только была документация!)

Вот что я сделал до сих пор:

  1. Установил Jenkins (очевидно) на моем Windows Server (нет, у меня не было выбора по этому поводу)
  2. Создал репозиторий в моей учетной записи на github и поместил в него мой код
    • Публично на https://github.com/mcholl/SARS-Import/
    • Вы увидите, что у меня есть два сценария, roottest.py и omniture-video \ test.py. Я уверен, что этот код защищен патентом Apple :)
    • Идея в том, что я хотел бы запустить roottest.py
  3. Установил плагин Github
  4. Создал работу следующим образом:
    • Название проекта = "Тестирование Github Integration"
    • Проект GitHub: https://github.com/mcholl/SARS-Import.git/
    • Добавьте пакетную команду Windows: python roottest.py
  5. Выполнить работу вручную

Однако я получаю сообщение об ошибке, что файл не может быть найден. Это странно, поскольку я предполагаю, что рабочий процесс будет «вытягивать локальную копию источника в каталог ... (Job) / workspace /, а затем запускать пакетную команду в контексте каталога рабочей области.

Вот полный вывод консоли:

Создано пользователем anonymous Сборка в рабочем пространстве C: \ Program Files (x86) \ Jenkins \ jobs \ Тестирование интеграции Github \ workspace [workspace] $ cmd / c call C: \ Windows \ TEMP \ hudson1966342425043540895.bat

C: \ Program Files (x86) \ Jenkins \ jobs \ Testing Github Integration \ workspace> python roottest.py python: невозможно открыть файл 'roottest.py': [Errno 2] Нет такого файла или каталога

C: \ Program Files (x86) \ Jenkins \ jobs \ Testing Github Integration \ workspace> exit 2 Шаг сборки «Выполнить пакетную команду Windows», помеченный как сборка как сбой Завершено: СБОЙ

Очевидно, я ожидал увидеть результаты моего оператора печати в консоли.

Что я испортил? И почему мой сценарий уже не там?


Давайте посмотрим код из C: \ Windows \ TEMP \ hudson1966342425043540895.bat вы используете git pull?

Дженкинс автоматически создает, а затем удаляет его. Однако вы можете увидеть все содержимое в выводе консоли - это команда «python roottest.py», на которую я ссылался выше
Affable Geek

roottest.py не в вашем пути. Вы видите файл в каталоге рабочей области или он также автоматически удаляется? Когда вы запускаете git pull, вам нужно быть в локальной копии клонированного репозитория, я считаю, что он должен затем вносить любые новые изменения в локальный репозиторий. Трудно помочь вам, когда я не вижу ни одной действующей команды.

Следовали ли вы этим инструкциям для плагина github wiki.jenkins-ci.org/display/JENKINS/Git+Plugin#GitPlugin- ? Вы установили переменную среды GIT_HOME и т. Д.?

D'о! Еще одна причина ненавидеть окна. Спасибо - я думаю, что это может быть проблемой
Приветливый Компьютерщик

Ответы:


5

Для моей сборки (на хосте Linux) я делаю что-то вроде этого (в качестве шага сборки в Jenkins), чтобы выполнить скрипт сборки из только что извлеченного рабочего пространства:

Выполнить команду оболочки:

 sh -x $WORKSPACE/build/myproject.build

Я предполагаю, что это будет работать аналогично в Windows, за исключением того, что вы, конечно, будете использовать \ вместо / и использовать python, а не sh для выполнения скрипта.


2

Вы можете написать две строки в вашей сборке:

chmod 777 ./my_script.sh
./my_script.sh

1
Мировые разрешения на запись не могут быть лучшей идеей! Почему не 755 (владелец пишет, все остальные читают / исполняют.
kmarsh

777 действительно не лучшая идея, но этот ответ действительно помог мне.
Робин Диджхоф

0

Вы можете сохранить некоторый скрипт в Git, например test.sh:

#!/bin/bash
_test_func(){ 
 echo 'test'
}

Затем в поле ввода «Выполнить оболочку» поместите импорт этого скрипта и вызовите «_test_func»:

source test.sh
_test_func

Результат:

 + source test.sh
 + _test_func
 test
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.