Как использовать переменную docker image в github-actions? - PullRequest
1 голос
/ 20 октября 2019

Я пытаюсь написать пользовательское действие github, которое запускает некоторые команды в контейнере Docker, но позволяет пользователю выбирать, в каком контейнере Docker они запускаются (т.е. я могу запускать одни и те же инструкции по сборке для разных версий среды выполнения. окружающая среда)

Мой инстинкт инстинкта состоял в том, чтобы мой .github/actions/main/action.yml файл был

name: 'Docker container command execution'
inputs:
  dockerfile:
    default: Dockerfile_r_latest
runs:
  using: 'docker' 
  image: '${{ inputs.dockerfile }}'
  args:
   - /scripts/commands.sh

Однако эти ошибки с: ##[error](Line: 7, Col: 10): Unrecognized named-value: 'inputs'. Located at position 1 within expression: inputs.dockerfile

Любая помощь будет оценена!

Ссылка на файл

Мой .github/workflow/build_and_test.yml файл:

name: Test Package

on: 
  [push, pull_request]

jobs:

  R_latest:

    name: Test on latest
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@master
        name: Checkout project

      - uses: ./.github/actions/main
        name: Build and test
        with:
          dockerfile: Dockerfile_r_latest

И мой Dockerfile .github/actions/main/Dockerfile_r_latest:

FROM rocker/verse:latest
ADD scripts /scripts
ENTRYPOINT [ "bash", "-c" ]

1 Ответ

1 голос
/ 21 октября 2019

Интересный подход! Я не уверен, возможно ли использовать выражения в поле image метаданных действия. Я полагаю, что единственными полями, которые могут принимать выражения вместо жестко закодированных строк, являются args для изображения, так что можно передать inputs.

Для справки это раздел argsaction.yml метаданные. https://help.github.com/en/articles/metadata-syntax-for-github-actions#args

Я думаю, что есть другие способы достичь того, что вы хотите сделать. Вы пытались использовать синтаксис jobs.<job_id>.container? Это позволяет вам указать изображение, в котором будут выполняться шаги задания. Однако для этого потребуется опубликовать изображение в общедоступном репозитории. Поэтому постарайтесь не включать никаких секретов.

Например, если вы опубликовали свое изображение в Docker Hub на gowerc/r-latest, ваш рабочий процесс может выглядеть примерно так:

name: Test Package

on: 
  [push, pull_request]

jobs:

  R_latest:

    name: Test on latest
    runs-on: ubuntu-latest
    container: gowerc/r-latest
    steps:
      - uses: actions/checkout@master
        name: Checkout project

      - name: Build and test
        run: ./scripts/commands.sh

ref: https://help.github.com/en/articles/workflow-syntax-for-github-actions#jobsjob_idcontainer

Кроме того, вы также можете указать свое изображение на уровне шага с помощью uses. Затем вы можете передать команду через args для выполнения вашего скрипта.

name: my workflow
on: push
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@master
      - name: Check container
        uses: docker://alpine:3.8
        with:
          args: /bin/sh -c "cat /etc/alpine-release"

ref: https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#example-using-a-docker-hub-action

...