GitHub动作:如何将VERSION文件的内容放入环境变量中?

时间:2020-11-06 20:35:06

标签: docker github-actions

在Docker项目的仓库中,我有一个VERSION文件,其中只包含版本号。

1.2.3

在Travis中,我可以将文件cat转换为环境变量,并在推送到Docker Hub之前使用它来标记我的构建。

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

与GitHub Actions中的等效吗?我试过了,但是没用。

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} .

2 个答案:

答案 0 :(得分:0)

我走的是Benjamin W.所说的在我的环境中而不是在特定步骤中使用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

答案 1 :(得分:0)

因为我想在作业之间重复使用 ENV_VAR,所以我就是这样做的。我希望我能找到一种方法来最小化这段代码。

在本例中,我使用 Dockerfile 中的 VAR。但它适用于任何文件。

  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