Рабочий процесс Github Actions не работает при выполнении шагов в контейнере

Я только начал настраивать рабочий процесс Github-actions для одного из проектов. Я попытался выполнить шаги рабочего процесса внутри контейнера с этим определением рабочего процесса:

  name: TMT-Charts-CI

  on:
    push:
      branches:
        - master
        - actions-ci

  jobs:
    build:
      runs-on: ubuntu-latest
      container:
        image: docker://alpine/helm:2.13.0

      steps:
      - name: Checkout Code
        uses: actions/checkout@v1

      - name: Validate and Upload Chart to Chart Museum
        run: |
          echo "Hello, world!"
          export PAGER=$(git diff-tree --no-commit-id --name-only -r HEAD)
          echo "Changed Components are  => $PAGER"
          export COMPONENT="NOTSET"
          for CHANGE in $PAGER; do ENV_DIR=${CHANGE%%/*}; done
          for CHANGE in $PAGER; do if [[ "$CHANGE" != .* ]] && [[ "$ENV_DIR" == "${CHANGE%%/*}" ]]; then export COMPONENT="$CHANGE"; elif [[ "$CHANGE" == .* ]]; then echo "Not a Valid Dir for Helm Chart" ; else echo "Only one component per PR should be changed" && exit 1; fi; done
          if [ "$COMPONENT" == "NOTSET" ]; then echo "No component is changed!" && exit 1;  fi
          echo "Initializing Component => $COMPONENT"
          echo $COMPONENT | cut -f1 -d"/"
          export COMPONENT_DIR="${COMPONENT%%/*}"
          echo "Changed Dir => $COMPONENT_DIR"
          cd $COMPONENT_DIR
          echo "Install Helm and Upload Chart If Exists"
          curl -L https://git.io/get_helm.sh | bash
          helm init --client-only

Но Workflow не сообщает, что контейнер немедленно остановлен.

Описание ошибки

Я пробовал много изображений, включая изображение «alpine: 3.8», описанное в официальной документации, но контейнер останавливается.

Согласно синтаксису рабочего процесса для действий GitHub, в разделе «Контейнер»: «Контейнер для выполнения любых шагов в задании, в которых еще не указан контейнер». Я предполагаю, что контейнер будет запущен, и шаги будут выполняться внутри контейнера Docker.


person Rezwan    schedule 28.08.2019    source источник
comment
Контейнер остановлен или не запускается. Вроде нет изображения docker://alpine/helm:2.13.0 вытащить и запустить   -  person Truong Dang    schedule 28.08.2019
comment
Изображение извлекается, и контейнер запускается один раз, но затем немедленно останавливается   -  person Rezwan    schedule 28.08.2019
comment
Он выбирает изображение из dockerhub   -  person Rezwan    schedule 28.08.2019
comment
Я просто пытаюсь вытащить твой контейнер и получаю это docker pull docker://alpine/helm:2.13.0 invalid reference format   -  person Truong Dang    schedule 28.08.2019
comment
Кажется, github не может вытащить ваше изображение и запустить его. Если вы получили этот образ из dockerhub, и он общедоступен, почему я не могу его вытащить? И имя изображения явно недопустимого формата   -  person Truong Dang    schedule 28.08.2019
comment
Его синтаксис действий github для добавления docker: // перед именем изображения, прочтите это help.github.com/en/articles/   -  person Rezwan    schedule 28.08.2019
comment
Я просто смотрю на их пример. И my_job: container: image: node:10.16-jessie я заметил, что, кажется, нет необходимости добавлять docker: //   -  person Truong Dang    schedule 28.08.2019
comment
Это можно сделать без префикса docker: //, но проблема остается той же, не имеет значения, если вы поставили docker: // или нет, потому что в журналах показано, что изображение извлечено и контейнер запущен, я не могу прикрепить sc здесь, но изображение потянул, и контейнер запущен.   -  person Rezwan    schedule 28.08.2019
comment
Видите ли, на скриншоте сказано, что контейнер не запущен, это означает, что контейнер есть, но он остановлен, и, очевидно, контейнер был запущен из предоставленного изображения.   -  person Rezwan    schedule 28.08.2019


Ответы (1)


Мы можем добиться этого, создав пользовательские образы докеров. На самом деле бегуны Github каким-то образом останавливают работающий контейнер после выполнения команды точки входа, я сделал образ докера с точкой входа, чтобы контейнер стал живым, поэтому контейнер не умирает после запуска.

Вот собственный файл Dockerfile (https://github.com/rizwan937/Helm-Image) Вы можете опубликовать этот образ в dockerhub и использовать его в файле рабочего процесса, например

 container:
   image: docker://rizwan937/helm

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

Это временное решение, если у кого-то есть лучшее, дайте мне знать.

person Rezwan    schedule 29.08.2019