Почему сценарии оболочки .sh работают в учебнике Concourse, но НЕ в моей реальной кодовой базе?

Очень новичок в настройке системы CI, поэтому, пожалуйста, будьте осторожны :)

Я следую руководству Старка и Уэйна и попытка заставить yml задачи Concourse CI запустить сценарий оболочки, который он находит через входную папку:

task.yml

---
platform: linux

image_resource:
  type: docker-image
  source: {repository: busybox}

inputs:
- name: my-input-folder

run:
  path: ./my-input-folder/my-shell-script.sh

Итак, когда я бегу:

fly --target team-name execute --config task.yml -i my-input-folder=my-input-folder

Он должен войти в эту папку, выполнить действие my-shell-script.sh и повторить this is working, который там находится.

Вместо этого я получаю:

hijack: Backend error: Exit status: 500, message: {"Type":"","Message":"runc exec: exit status 1: exec failed: container_linux.go:264: starting container process caused \"exec: \\\"./__tests__/this-is-my-shell-script.sh\\\": permission denied\"\n","Handle":""}

Я понимаю, что это что-то связано с образом docker/busybox, из этой другой темы.

Но...

а) почему это работает с одним и тем же расширением .sh и изображением busybox в их туториале? (но тогда нет, когда я использую его в своем реальном проекте?)

б) как я могу решить эту проблему, чтобы в моем проекте выполнялись сценарии оболочки? Какой образ докера подойдет?


person Aid    schedule 04.12.2017    source источник


Ответы (3)


Я узнал от коллег, что эта ошибка была вызвана:

а) нужно chmod +x folder/name-of-file.sh, чтобы это был исполняемый файл.

и

б) Добавление #!/bin/sh в начало моего файла .sh (поскольку я использую oh-my-zsh). Хотя я понимаю, что если бы я использовал bash, это было бы #!/bin/bash.

Теперь скрипт оболочки прекрасно линкуется.

person Aid    schedule 04.12.2017

Я сменил образ на образ ubuntu, и он сработал, но alpine тоже не работает. Ubuntu более жирный и имеет больше начальных команд sh. Облегченный (alpine, busybox) имеет меньше команд sh.

source: {repository: ubuntu}
person Janis Karklins    schedule 07.11.2018

а) поскольку он был создан в git, он работает нормально, поскольку в этих файлах установлено разрешение. когда вы изменяете его или создаете новый файл, он не работает, так как разрешение изменяется. Я предполагаю, что вы используете машину с Windows.

б) решение состоит в том, чтобы изменить разрешение индекса git git update-index --chmod=+x /path/to/file. Если вы измените только локальное разрешение для файлов, это может сработать, поскольку вы пытаетесь запустить разовую задачу, но это создаст вам сложности, как только вы начнете использовать ресурс concourse git, с которым вы столкнетесь далее в руководстве.

см. https://github.com/concourse/concourse/issues/2161

person Yuhan.C    schedule 01.10.2019