Сбой задачи Gocd после выполнения сценария оболочки

Запуск сервера GOCD на сервере Windows и агента в Windows 10. Одной из задач в конвейере является запуск сценария оболочки в агенте с использованием пользовательской команды в задаче GOCD.

На данный момент сценарий оболочки имеет только 1 строку

echo "hello"

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

Обновление: мой файл конфигурации для конвейера, который запускает файл sh. Содержимое такое же, как и выше, для однострочной эхо-команды.

<?xml version="1.0" encoding="utf-8"?>
<cruise xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="cruise-config.xsd" schemaVersion="106">
  <server artifactsdir="artifacts" agentAutoRegisterKey="270fb4b6-d548-435b-a4b5-a6f6952e1a4d" webhookSecret="eba9b673-0757-4577-807d-82dca985d17f" commandRepositoryLocation="default" serverId="359f16bd-f9c9-4c52-bd78-081df4069961" tokenGenerationKey="82d73c79-47f7-494e-9ec7-76639d4ec961" />
  <pipelines group="defaultGroup">
    <pipeline name="test1">
      <materials>
        <git url="http://infygit.ad.infosys.com/Mohit_Vora/InfyBankH2Dev.git" dest="codedev" />
      </materials>
      <stage name="defaultStage">
        <jobs>
          <job name="defaultJob">
            <tasks>
              <exec command="mvn clean install" workingdir="codedev">
                <runif status="passed" />
              </exec>
            </tasks>
            <artifacts>
              <artifact type="build" src="codedev/target/*.war" dest="deployWar" />
              <artifact type="build" src="codedev/tomcat.sh" dest="deployWar" />
              <artifact type="build" src="codedev/tomcat.bat" dest="deployWar" />
            </artifacts>
          </job>
        </jobs>
      </stage>
    </pipeline>
    <pipeline name="test2">
      <materials>
        <pipeline pipelineName="test1" stageName="defaultStage" />
      </materials>
      <stage name="defaultStage">
        <jobs>
          <job name="defaultJob">
            <tasks>
              <fetchartifact srcdir="deployWar" dest="warTestDeploy" pipeline="test1" stage="defaultStage" job="defaultJob">
                <runif status="passed" />
              </fetchartifact>
              <exec command="tomcat.sh" workingdir="warTestDeploy/deployWar">
                <runif status="passed" />
              </exec>
            </tasks>
          </job>
        </jobs>
      </stage>
    </pipeline>
  </pipelines>
  <agents>
    <agent hostname="MYSGEC241372D" ipaddress="10.123.75.196" uuid="37628ff5-91f7-4c9a-a5f5-615e937f2650" />
  </agents>
</cruise>

Мой журнал консоли:

##|19:47:17.280 [go] Start to build test2/25/defaultStage/1/defaultJob on MYSGEC241372D [C:\Program Files\Go Agent]
!!|19:47:17.280 [go] Task: fetch artifact [deployWar] => [warTestDeploy] from [test1/defaultStage/defaultJob]
&1|19:47:17.280 [go] Fetching artifact [deployWar] from [test1/13/defaultStage/1/defaultJob]
&1|19:47:26.211 [go] Saved artifact to [pipelines\test2\warTestDeploy] after verifying the integrity of its contents.
?0|19:47:26.211 [go] Task status: passed (8931 ms)
!!|19:47:26.211 [go] Task: tomcat.sh
?1|19:49:06.044 [go] Task status: failed (99833 ms) (exit code: -1073741819)
j1|19:49:06.122 [go] Current job status: failed
##|19:49:06.169 [go] Start to create properties test2/25/defaultStage/1/defaultJob on MYSGEC241372D [C:\Program Files\Go Agent]
ar|19:49:06.169 [go] Start to upload test2/25/defaultStage/1/defaultJob on MYSGEC241372D [C:\Program Files\Go Agent]
ex|19:49:06.274 [go] Job completed test2/25/defaultStage/1/defaultJob on MYSGEC241372D [C:\Program Files\Go Agent]

person MohitVora    schedule 05.05.2018    source источник
comment
если вы спрашиваете о коде сценария оболочки, есть файл с именем test.sh с содержимым типа echo hello. если нет, то какой еще код вы просите? Я вызываю этот скрипт из пользовательской команды, просто написав test.sh в текстовом поле команды без каких-либо аргументов. как если бы мы были в cmd, чтобы вызвать сценарий, все, что мы сделали бы, это имя сценария, а затем нажмите клавишу ввода, чтобы сценарий sh запустился, и управление вернулось к cmd.   -  person MohitVora    schedule 06.05.2018
comment
правильно, мой плохой. Возможно, вы захотите добавить информацию, указанную в комментарии, к вопросу, поскольку читатели ожидают, что все будет хорошо изложено, вместо того, чтобы просматривать комментарии. Я не пользователь Windows, но у них тоже есть какие-то разрешения, так что они. Возможно, файлу сценария не хватает прав на выполнение.   -  person Karl Richter    schedule 06.05.2018
comment
Пожалуйста, вставьте свой XML-файл конфигурации для этой задачи и выходные данные, которые создает задача. Потенциальным источником ошибок после успешного выполнения задачи является то, что вы, возможно, настроили ее для получения некоторых артефактов, но GoCD не может найти файлы. Но из-за отсутствия деталей в вопросе невозможно сказать.   -  person moritz    schedule 06.05.2018
comment
Большое спасибо, Карл, за исправление форматирования в моем вопросе ... Я нуб для ТАК. @moritz У меня нет файла конфигурации, все было из графического интерфейса, но я думаю, то, что вы просите, должно быть где-то в папке сервера в папке conf. Я найду его и вставлю сюда вместе со скриншотом консоли. спасибо за руководство.   -  person MohitVora    schedule 06.05.2018
comment
@gogamote, вы можете перейти к Admin -> Config XML, где он показывает вам всю конфигурацию (хотя вам может потребоваться быть администратором, чтобы добраться туда).   -  person moritz    schedule 06.05.2018
comment
я вставил config.xml. Я все еще застрял на том же этапе, однако обнаружил, что выполнение того же действия в пакетном файле не приводит к сбою задачи, поэтому я продолжаю свою работу с пакетом. Если кто-то думает, что это ошибка, я бы хотел создать исходный код go-cd и создать PR.   -  person MohitVora    schedule 07.05.2018
comment
Если вы откроете консоль на своем агенте gocd, с пользователем, от имени которого работает процесс агента (не уверен, что в Windows, но в Linux это пользователь go). Вы можете попробовать выполнить тот же сценарий оболочки и посмотреть, правильно ли он работает.   -  person Val F.    schedule 20.06.2018


Ответы (1)


Думаю, я понял это. кто-то может подтвердить или опровергнуть меня фактически.

  1. наткнулся на это где-то в тредах, gocd учитывает коды возврата при выполнении внешних файлов оболочки или bat. если код возврата равен 0, он считает выполнение успешным, если нет, он считает это неудачной попыткой выполнить соответствующий сценарий bat или shell. который в моем случае должен быть ненулевым кодом возврата, поскольку разные сценарии и библиотеки рассматривают разные коды возврата как успех или неудачу. установка кода возврата вручную была бы возможным решением.

  2. echo "hello" был просто экспериментом, когда я добавил осмысленный код, который касался запуска и запуска экземпляра сервера, он держит новое окно CMD открытым до тех пор, пока я не уничтожу экземпляр сервера вручную, что означает, что управление никогда не возвращается к gocd, и, следовательно, оно выдает ошибку тайм-аута.

Открыт для комментариев по этому поводу, у меня больше нет доступа к коду.

person MohitVora    schedule 22.06.2018