1

在 Windows Server 上运行 GOCD 服务器,在 Windows 10 上运行代理。管道中的任务之一是使用 GOCD 任务中的自定义命令在代理中运行 shell 脚本。

截至目前,shell脚本只有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]
4

1 回答 1

0

我想我想通了。有人可以事实地肯定或反驳我。

  1. 在线程的某个地方遇到这个问题,gocd 在执行外部 shell 或 bat 文件时会考虑返回码。如果返回码为 0,则认为执行成功,如果不是,则认为执行相应的 bat 或 shell 脚本失败。在我的情况下,它必须是非零返回码,因为不同的脚本和库将不同的返回码视为成功或失败。手动设置返回码是可能的解决方案。

  2. echo "hello" 只是一个实验,当我添加有意义的代码时,它是关于使服务器实例启动并运行的,它会保持新的 CMD 窗口打开,直到我手动终止服务器实例,这意味着控制永远不会返回到 gocd,因此它遭受超时错误。

对此开放评论,不再有权访问代码。

于 2018-06-22T16:16:28.000 回答