Как использовать Docker изображение из GitHub Packages? - PullRequest
0 голосов
/ 31 января 2020

У меня есть этот код на .github / workflows / main.yaml

# .github/workflows/main.yaml
name: CI Workflow

on: [push]

jobs:
  rspec-job:
    runs-on: ubuntu-latest
    env:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    container:
      image: I-stucked-here
      volumes:
        - /vendor/bundle
    steps:
      - code omitted for brevity

Основная идея этого задания - выполнить все шаги в режиме контейнера. Не в режиме хоста Linux.

В том же хранилище у меня есть опубликованное c Docker изображение с именем ruby -rimy-2.6.3 . Так как он не размещен на DockerHub публично, я не могу найти способ программной аутентификации себя в GitHub Packages / Registry.

Я пробовал использовать другой синтаксис (см. Код ниже), но он не работал.

# .github/workflows/main.yaml
name: CI Workflow

on: [push]

jobs:
  rspec-job:
    runs-on: ubuntu-latest
    env:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    container:
      image: docker://docker.pkg.github.com/zulhfreelancer/rimy/ruby-rimy-2.6.3:latest
      volumes:
        - /vendor/bundle
    steps:
      - code omitted for brevity

В документации GitHub сообщает, что GITHUB_TOKEN доступен во время выполнения задания. Как использовать эту переменную окружения GITHUB_TOKEN для запуска чего-то вроде docker login поверх этого раздела container:, чтобы задание могло извлекать образ?

Использование GitHub Personal Token не вариант для меня, потому что этот репозиторий - только мой репозиторий эксперимента, прежде чем применить то же самое к моей организации GitHub. Я не хочу помещать свой личный токен в переменные / секреты среды репозитория моей организации - это просто выставит мой личный токен моим коллегам.

1 Ответ

0 голосов
/ 02 февраля 2020

Вам не нужно использовать инструкцию container для запуска тестов в контейнере.

Хост действий GitHub поставляется с установленными docker и docker -compose. У меня в хранилище есть docker-compose.yml, в который входит «служба», запускающая тесты. Затем ваш рабочий процесс должен выполнить docker login и просто выполнить команду docker-compose run test.

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

Что-то вроде этого:

name: Test
on:
  pull_request:
  push: { branches: master }

jobs:
  test:
    name: Run test suite
    runs-on: ubuntu-latest
    env:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

    steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Docker login
      run: echo ${GITHUB_TOKEN} | docker login -u ${GITHUB_ACTOR} --password-stdin docker.pkg.github.com

    - name: Build docker images
      run: docker-compose build

    - name: Run tests
      run: docker-compose run test

Я делаю то же самое с DockerHub, с большой легкостью и успехом.

Конечно, если вы делаете не хотите использовать docker -compose, вы все равно можете использовать любые нормальные docker run ... команды после того, как вы правильно войдете в систему на шаге входа в систему.

Я не уверен, что команда docker login будет работать как есть, см. для более глубокого обсуждения:

...