Как передать имя изображения docker в мое действие на GitHub

#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. Я не думаю, что у тебя есть другой выбор.