Действия GitHub: Как перенести содержимое файла VERSION в переменную окружения?

В моем репозитории проекта Docker у меня есть файл VERSION, который не содержит ничего, кроме номера версии.

1.2.3

В Travis я могу cat поместить файл в переменную среды и использовать это для пометки моей сборки перед отправкой в ​​Docker Hub.

---
env:
  global:
    - USER=username
    - REPO=my_great_project
    - VERSION=$(cat VERSION)

Что эквивалентно этому в Действиях GitHub? Я пробовал это, но не работает.

name: Test

on:
  ...
  ...

env:
  USER: username
  REPO: my_great_project

jobs:
  build_ubuntu:
    name: Build Ubuntu

    runs-on: ubuntu-latest
    env:
      BASE: ubuntu

    steps:
    - name: Check out the codebase
      uses: actions/checkout@v2

    - name: Build the image
      run: |
        VERSION=$(cat VERSION)
        docker build --file ${BASE}/Dockerfile --tag ${USER}/${REPO}:${VERSION} .

  build_alpine:
    name: Build Alpine

    runs-on: ubuntu-latest
    env:
      BASE: alpine

    ...
    ...
    ...

Я тоже пробовал это, но это не работает.

- name: Build the image
  run: |
    echo "VERSION=$(cat ./VERSION)" >> $GITHUB_ENV
    docker build --file ${BASE}/Dockerfile --tag ${USER}/${REPO}:${VERSION} .

person Logan M.    schedule 06.11.2020    source источник
comment
Вам нужен VERSION в среде или он нужен вам просто как значение переменной VERSION в команде docker build?   -  person Benjamin W.    schedule 07.11.2020
comment
Мне просто нужно использовать docker build, docker tag и docker push   -  person Logan M.    schedule 07.11.2020
comment
Если вам это не нужно в вашей среде, вы можете использовать VERSION=$(< VERSION), а затем просто использовать $VERSION на том же шаге run. По сути, то, что вы сделали с первой попытки. Как это не работает?   -  person Benjamin W.    schedule 07.11.2020
comment
Ух, я идиот. Это был другой шаг, который терпел неудачу, когда я работал с тем, что у меня было.   -  person Logan M.    schedule 07.11.2020
comment
Кажется, мне действительно нужно VERSION в окружающей среде. Я пытаюсь использовать его в несколько этапов и не хочу устанавливать его каждый раз. Есть ли способ добавить его для всех шагов?   -  person Logan M.    schedule 07.11.2020


Ответы (2)


Я пошел по пути, о котором говорил Бенджамин В., имея VERSION в моей среде, а не только на этом конкретном этапе .

Это помогло мне установить переменную за один шаг, а затем использовать ее на отдельных шагах.

- name: Set variables
  run: |
    VER=$(cat VERSION)
    echo "VERSION=$VER" >> $GITHUB_ENV

- name: Build Docker Image
  uses: docker/build-push-action@v2
  with:
    context: .
    file: ${{ env.BASE_DIR }}/Dockerfile
    load: true
    tags: |
      ${{ env.USER }}/${{ env.REPO }}:${{ env.VERSION }}
      ${{ env.USER }}/${{ env.REPO }}:latest
person Logan M.    schedule 07.11.2020

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

В этом примере я использую VAR из моего Dockerfile. Но будет работать с любым файлом.

  pre_build:
    runs-on: ubuntu-20.04
    steps:
        ...
      -
        name: Save variables to disk
        run: |
          cat $(echo ${{ env.DOCKERFILE }}) | grep DOCKERHUB_USER= | head -n 1 | grep -o '".*"' | sed 's/"//g' > ~/varz/DOCKERHUB_USER
          cat $(echo ${{ env.DOCKERFILE }}) | grep GITHUB_ORG= | head -n 1 | grep -o '".*"' | sed 's/"//g' > ~/varz/GITHUB_ORG
          cat $(echo ${{ env.DOCKERFILE }}) | grep GITHUB_REGISTRY= | head -n 1 | grep -o '".*"' | sed 's/"//g' > ~/varz/GITHUB_REGISTRY
          echo "$(cat ~/varz/DOCKERHUB_USER)/$(cat ~/varz/APP_NAME)" > ~/varz/DKR_PREFIX
      - 
        name: Set ALL variables for this job | à la sauce GitHub Actions
        run: |
          echo "VERSION_HASH_DATE=$(cat ~/varz/VERSION_HASH_DATE)" >> $GITHUB_ENV
          echo "VERSION_HASH_ONLY=$(cat ~/varz/VERSION_HASH_ONLY)" >> $GITHUB_ENV
          echo "VERSION_CI=$(cat ~/varz/VERSION_CI)" >> $GITHUB_ENV
          echo "VERSION_BRANCH=$(cat ~/varz/VERSION_BRANCH)" >> $GITHUB_ENV
      -
        name: Show variables
        run: |
          echo "${{ env.VERSION_HASH_DATE }} < VERSION_HASH_DATE"
          echo "${{ env.VERSION_HASH_ONLY }} < VERSION_HASH_ONLY"
          echo "${{ env.VERSION_CI }} < VERSION_CI"
          echo "${{ env.VERSION_BRANCH }} < VERSION_BRANCH"
      - 
        name: Upload variables as artifact
        uses: actions/upload-artifact@master
        with:
          name: variables_on_disk
          path: ~/varz

  test_build:
    needs: [pre_build]
    runs-on: ubuntu-20.04
    steps:
       ...
      - 
        name: Job preparation | Download variables from artifact
        uses: actions/download-artifact@master
        with:
          name: variables_on_disk
          path: ~/varz
      - 
        name: Job preparation | Set variables for this job | à la sauce GitHub Actions
        run: |
          echo "VERSION_HASH_DATE=$(cat ~/varz/VERSION_HASH_DATE)" >> $GITHUB_ENV
          echo "VERSION_HASH_ONLY=$(cat ~/varz/VERSION_HASH_ONLY)" >> $GITHUB_ENV
          echo "VERSION_BRANCH=$(cat ~/varz/VERSION_BRANCH)" >> $GITHUB_ENV
          echo "BRANCH_NAME=$(cat ~/varz/BRANCH_NAME)" >> $GITHUB_ENV
person Pascal Andy    schedule 23.06.2021