Как выполнить скрипт, находящийся в раннере, из ci-pipeline?

У меня есть образ 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 job_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

Я искал код ошибки, но не смог найти объяснения.

Что мне не хватает?


person tgr    schedule 09.08.2017    source источник
comment
Вы не указали изображение в своем ямле?   -  person Tarun Lalwani    schedule 09.08.2017
comment
Зарегистрировал раннер с тегом Jenkins. Как видно в журнале, загружено правильное изображение.   -  person tgr    schedule 10.08.2017
comment
Это исполняемый файл или сценарий оболочки?   -  person Tarun Lalwani    schedule 10.08.2017
comment
trigger-jenkins - это исполняемый сценарий оболочки.   -  person tgr    schedule 10.08.2017


Ответы (2)


Проблема возникла не из-за exec. Вероятно, проблема заключалась в том, что ваша точка входа была /bin/bash и Gitlab CI пытался выполнить /bin/sh, который является исполняемым файлом. Приводит к чему-то вроде ниже

/bin/bash /bin/sh command args

Вот что мы видим в жалобе. Невозможно выполнить двоичный файл. То, чем должен был быть ваш entrypoint, находится ниже

ENTRYPOINT ["/bin/bash", "-c"]

Это обеспечило бы выполнение команды с помощью bash, и независимо от того, является ли это другой оболочкой или bash, она сработает. Не нужно изменять и создавать entrypoint.sh

person Tarun Lalwani    schedule 10.08.2017
comment
это исправление решило эту проблему для меня, но затем дало другую ошибку, в конечном итоге для меня решением было использовать ENTRYPOINT [""] обсуждение проблемы здесь - person cryanbhu; 20.01.2021
comment
Ошибка произойдет в том случае, если /bin/bash недоступен в образе - person Tarun Lalwani; 20.01.2021
comment
Понятно ... я создавал контейнер как с Python, так и с Java - person cryanbhu; 20.01.2021

Я продолжил свое исследование и нашел хранилище официальных образов докеров maven.

Они решили аналогичную проблему, создав файл mvn-entrypoint.sh. Итак, я попробовал то же самое:

entrypoint.sh

#!/bin/sh

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

exec "$@"

Это сработало.

person tgr    schedule 10.08.2017