Примечание. В GitHub Enterprise Server в настоящее время не поддерживаются средства выполнения тестов, размещенные в GitHub. Дополнительные сведения о планируемой поддержке в будущем см. в GitHub public roadmap.
Инструкции по Dockerfile
Dockerfile содержит инструкции и аргументы, определяющие содержимое и реакцию на событие запуска контейнера Docker. Дополнительные сведения об инструкциях, поддерживаемых Docker, см. в статье Справочник по Dockerfile в документации по Docker.
Инструкции и переопределения Dockerfile
Некоторые инструкции Docker взаимодействуют с GitHub Actions, а файл метаданных действия может переопределять некоторые инструкции Docker. Обязательно изучите то, как Dockerfile взаимодействует с GitHub Actions, чтобы предотвратить непредвиденную реакцию на событие.
Пользователь
Действия Docker должен выполнять пользователь Docker по умолчанию (корневой). Не используйте инструкцию USER в вашем Dockerfileкаталоге, так как вы не сможете получить доступ к каталогу GITHUB_WORKSPACE . Дополнительные сведения см. в разделе "Переменные" и справочнике ПОЛЬЗОВАТЕЛЯ в документации По Docker.
FROM
Первой инструкцией в Dockerfile должна быть FROM, выбирающая базовый образ Docker. Дополнительные сведения см. в справочнике FROM в документации по Docker.
Далее приведены некоторые рекомендации по настройке аргумента FROM:
- Рекомендуется использовать официальные образы Docker. Например,
pythonилиruby. - Используйте тег версии (если он существует), предпочтительно с основным номером версии. Например, используйте функцию
node:10вместоnode:latest. - Рекомендуется использовать образы Docker, основанные на операционной системе Debian.
WORKDIR
GitHub Enterprise Server задает путь к рабочей папке в переменной среды GITHUB_WORKSPACE. Инструкцию WORKDIR не рекомендуется использовать в Dockerfile. Перед выполнением действия GitHub Enterprise Server подключит каталог GITHUB_WORKSPACE поверх всего, что находилось в этом расположении в образе Docker и задаст GITHUB_WORKSPACE в качестве рабочей папки. Дополнительные сведения см. в разделе "Переменные" и справочнике ПО WORKDIR в документации По Docker.
ENTRYPOINT
Если вы укажите entrypoint в файле метаданных действия, он переопределит ENTRYPOINT, указанный в файле Dockerfile. Дополнительные сведения см. в разделе Синтаксис метаданных для GitHub Actions.
Инструкция Docker ENTRYPOINT имеет форму оболочки и форму exec. В документации по ENTRYPOINT Docker рекомендуется использовать форму exec инструкции ENTRYPOINT. Дополнительные сведения о форме exec и форме оболочки см. в справочнике ENTRYPOINT в документации по Docker.
Не следует применять WORKDIR для указания точки входа в Dockerfile. Вместо этого воспользуйтесь абсолютным путем. Дополнительные сведения см. в статье о WORKDIR.
Если вы настроите контейнер для использования формы exec инструкции ENTRYPOINT, args, настроенный в файле метаданных действия, не будет выполняться в командной оболочке. Если args действия содержит переменную среды, эта переменная не будет заменена. Например, при использовании следующего формата exec вместо значения, хранящегося в $GITHUB_SHA, будет напечатано "$GITHUB_SHA".
ENTRYPOINT ["echo $GITHUB_SHA"]
Если вам нужно выполнить подстановку переменной, используйте форму оболочки или выполните оболочку напрямую. Например, используя следующий формат exec, можно выполнить оболочку для печати значения, хранящегося в переменной среды GITHUB_SHA.
ENTRYPOINT ["sh", "-c", "echo $GITHUB_SHA"]
Чтобы предоставить args, определенный в файле метаданных действия, контейнеру Docker, который использует форму exec в ENTRYPOINT, рекомендуется создать сценарий оболочки под именем entrypoint.sh, вызываемый из инструкции ENTRYPOINT:
Пример Dockerfile
# Container image that runs your code
FROM debian:9.5-slim
# Copies your code file from your action repository to the filesystem path `/` of the container
COPY entrypoint.sh /entrypoint.sh
# Executes `entrypoint.sh` when the Docker container starts up
ENTRYPOINT ["/entrypoint.sh"]
Пример файла entrypoint.sh
Используя приведенный выше пример Dockerfile, GitHub Enterprise Server отправит args, настроенный в файле метаданных действия в качестве аргументов, в entrypoint.sh. Добавьте #!/bin/sh shebang в начало файла entrypoint.sh, чтобы явно использовать оболочку, соответствующую POSIX.
#!/bin/sh
# `$#` expands to the number of arguments and `$@` expands to the supplied `args`
printf '%d args:' "$#"
printf " '%s'" "$@"
printf '\n'
Ваш код должен быть исполняемым. Прежде чем использовать файл entrypoint.sh в рабочем процессе, убедитесь, что он имеет разрешения execute. Вы можете изменить разрешение в терминале с помощью следующей команды:
chmod +x entrypoint.sh
Если сценарий оболочки ENTRYPOINT не является исполняемым, вы получите следующую ошибку:
Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"/entrypoint.sh\": permission denied": unknown
CMD
Если вы определите args в файле метаданных действия, args переопределит инструкцию CMD, указанную в Dockerfile. Дополнительные сведения см. в разделе "Синтаксис метаданных для GitHub Actions".
При использовании CMD в своем Dockerfile следуйте приведенным ниже рекомендациям:
- Задокументируйте обязательные аргументы в README действия и опустите их из инструкции
CMD. - Используйте значения по умолчанию, позволяющие использовать действие без указания
args. - Если действие предоставляет флаг
--helpили что-то подобное, используйте его, чтобы действие документировало само себя.
Поддерживаемые возможности Linux
GitHub Actions поддерживает возможности Linux по умолчанию, которые поддерживает Docker. Возможности нельзя добавлять или удалять. Дополнительные сведения о возможностях Linux по умолчанию, которые поддерживает Docker, см. в статье Привилегии среды выполнения и возможности Linux в документации по Docker. Дополнительные сведения о возможностях Linux см. в статье Общие сведения о возможностях Linux на страницах руководства Linux.