#docker #github-actions
Вопрос:
Я пытаюсь выполнить свое первое действие по созданию пакетов внутри данного контейнера docker. У меня есть следующий action.yaml
файл:
name: Build Package
description: Build Debian packages using Docker image
inputs:
docker_image:
description: Name of the docker image to use
required: true
runs:
using: 'composite'
steps:
- name: Check out the repository
uses: actions/checkout@v2
- name: Build `*.deb` packages
uses: 'docker://${{inputs.docker_image}}'
with:
entrypoint: ./build.sh
В другом репозитории я пытаюсь его использовать:
...
steps:
- uses: CMakeify-me/build-package-action@v1-beta
with:
docker_image: 'cmakeifyme/debian-9-deb-build:1.3'
К сожалению, у меня есть ошибка:
Error: CMakeify-me/build-package-action/v1-beta/action.yaml (Line: 19, Col: 13):
Error: CMakeify-me/build-package-action/v1-beta/action.yaml (Line: 19, Col: 13): Unrecognized named-value: 'inputs'. Located at position 1 within expression: inputs.docker_image
Error: GitHub.DistributedTask.ObjectTemplating.TemplateValidationException: The template is not valid. CMakeify-me/build-package-action/v1-beta/action.yaml (Line: 19, Col: 13): Unrecognized named-value: 'inputs'. Located at position 1 within expression: inputs.docker_image
at GitHub.DistributedTask.ObjectTemplating.TemplateValidationErrors.Check()
at GitHub.Runner.Worker.ActionManifestManager.ConvertRuns(IExecutionContext executionContext, TemplateContext templateContext, TemplateToken inputsToken, String fileRelativePath, MappingToken outputs)
at GitHub.Runner.Worker.ActionManifestManager.Load(IExecutionContext executionContext, String manifestFile)
Error: Fail to load CMakeify-me/build-package-action/v1-beta/action.yaml
Пытаюсь просто напечатать inputs
работы нормально:
- name: Spam
run: echo '${{ inputs.docker_image }}'
shell: bash
Это означает, что существует некоторая проблема, когда inputs.docker_image
используется значение uses:
;-(
Как я могу передать имя образа docker, которое будет использоваться в моем действии?
Спасибо.
Комментарии:
1. Второе репо не
inputs.docker_image
определено, верно? Может быть, поэтому он терпит неудачу?2. Второе репо пытается использовать действие и предоставляет
with.docker_image
-если я правильно понимаю, это способ передачи параметров действию…3. Да, вы правы.
Ответ №1:
Я не думаю, что вы не можете использовать входную/переменную с uses
подобным образом.
Это явно не упоминается в документации, но вы можете увидеть предупреждение здесь: https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions
- Предупреждение: При создании рабочих процессов и действий всегда следует учитывать, может ли ваш код выполнять ненадежные входные данные от возможных злоумышленников.
Если вам нужно динамически выбрать контейнер docker, возможно, вам придется поискать альтернативу. Вы можете избежать uses
и запустить docker непосредственно из оболочки, как это…
Назовите свое действие и передайте ввод через with
:
- uses: CMakeify-me/build-package-action@v1-beta
with:
docker_image: 'cmakeifyme/debian-9-deb-build:1.3'
Затем ваше действие может быть введено с помощью run
, используя shell
для вызова docker:
- name: run docker with dynamic image name
run: 'docker run ${{ inputs.docker_image }}'
shell: bash
Комментарии:
1. Да, я думал об этом… но, похоже, мне тоже придется выполнить
docker pull
это «вручную» (и, возможноdocker login
)… и это меня огорчает %( — что хорошего в поддержке докера в действиях GH, если мне придется выполнять все команды «вручную» %(2. Я не думаю, что у тебя есть другой выбор.