如何从ci管道执行位于运行器中的脚本?

时间:2017-08-09 10:42:56

标签: docker gitlab gitlab-ci gitlab-ci-runner

我有一个gitlab-runner图像如下:

Dockerfile

FROM alpine:3.6

RUN apk add --no-cache curl bash

COPY trigger-jenkins /usr/local/bin/trigger-jenkins

ENTRYPOINT ["/bin/bash"]

其目的是触发詹金斯的工作。通过以下方式运行:

docker run -ti jenkins-runner:latest trigger-jenkins jon_name

完美无缺。但当我试图通过以下方式做同样的事情时:

.gitlab-ci.yml

Jenkins Trigger:
  script:
    - trigger-jenkins job_name
  tags:
    - Jenkins

管道失败如下:

Running with gitlab-ci-multi-runner 9.3.0 (3df822b)
  on Jenkins Trigger (12475d61)
Using Docker executor with image jenkins-runner:latest ...
Using docker image sha256:44dedf0b3485e0e57107e2745739e1a252fb64c4161465e1b5ccc1119a1183bf for predefined container...
Using docker image jenkins-runner:latest ID=sha256:4760a8ef9139ee9c9a56c686de780fc49e176fe4294e1f0db4f431e117b6811c for build container...
Running on runner-12475d61-project-6-concurrent-0 via cc960a3794a0...
Cloning repository...
Cloning into '/builds/dev/Project'...
Checking out 874b2eac as test/jenkins...
Skipping Git submodules setup
/bin/sh: /bin/sh: cannot execute binary file
/bin/sh: /bin/sh: cannot execute binary file
ERROR: Job failed: exit code 126

我搜索了错误代码,但无法找到解释。

我错过了什么?

2 个答案:

答案 0 :(得分:2)

这个问题不是因为执行官。问题可能就是这个,你的入口点是Public Function Object_getObjectProperties(oInteraction) Set props = aqObject.GetProperties(oInteraction.guiObject, false) sProperties = "" While props.HasNext Set prop = props.Next If(sProperties<>"") Then sProperties = sProperties + INSTRUCTION_VALUE_SEPARATOR + prop.Name Else sProperties = prop.name End If Wend Object_getObjectProperties = sProperties End Function ,Gitlab CI试图执行\bin\bash这是一个可执行文件。导致类似下面的事情

/bin/sh

我们看到的投诉是什么。不能执行二进制文件。您的/bin/bash /bin/sh command args 应该是什么?

entrypoint

这将确保命令由bash执行,以及它是否是另一个shell或bash它将起作用。无需修改和创建ENTRYPOINT ["/bin/bash", "-c"]

答案 1 :(得分:0)

我继续我的研究,找到了官方maven docker图像的存储库。

他们通过创建mvn-entrypoint.sh解决了类似的问题。所以我尝试了同样的方法:

<强> entrypoint.sh

#!/bin/sh

export PATH=$PATH:/usr/local/bin/

exec "$@"

这就是诀窍。