如何传递从GitHub操作收到的环境变量

时间:2019-10-04 19:43:01

标签: docker dockerfile github-actions

在我的action.yml中,我定义了一个输入:

name: 'test action'
author: Param Thakkar
description: 'test'

inputs: 
  test_var:
    description: 'A test variable'
    required: true

runs:
  using: 'docker'
  image: 'Dockerfile'

在我的工作流程中,我通过了test_var:

name: CI

on: [push]

jobs:
  build:

runs-on: ubuntu-latest

steps:
  - name: Test the GH action
    uses: paramt/github-actions-playground@master
    with:
      test_var: "this is just a test"

因此在工作流运行时应该创建一个环境变量,对吗?但是当我运行这个简短的python脚本时:

import os

print(os.getenv('TEST_VAR'))
print("It works!")

exit(0)

它打印:

None
It works!

我认为我必须通过Dockerfile传递ENV变量...现在我的Dockerfile如下所示:

FROM python:latest

# Add files to the image
ADD entrypoint.py /entrypoint.py
ADD requirements.txt /requirements.txt

# Save ENV var in a temp file
RUN $TEST_VAR > /temp_var

# Install dependencies and make script executable
RUN pip install -r requirements.txt
RUN chmod +x entrypoint.py

RUN echo "temp var: "
RUN cat /temp_var

# Run script with the ENV var
ENTRYPOINT export TEST_VAR="$TEST_VAR"; /entrypoint.py

但是没有回显该变量,也没有将其传递给pythons脚本。当我尝试将$TEMP_VAR设置为随机字符串时,它会 发送到Python脚本。这是我的错吗?还是GitHub动作没有按预期运行?

这里是the link to the test repo

2 个答案:

答案 0 :(得分:2)

我认为您正在尝试读取错误的环境变量名称。 GitHub Actions将INPUT_添加到输入变量的名称。因此,请尝试以下操作:

print(os.getenv('INPUT_TEST_VAR'))

从文档中:

  

在工作流文件中为操作指定输入时,或使用   默认输入值,GitHub为   输入名称为INPUT_。环境变量   创建的将输入名称转换为大写字母并替换空格   含_个字符。

     

例如,如果工作流定义了numOctocats和octocatEyeColor   输入,操作代码可以使用以下命令读取输入的值:   INPUT_NUMOCTOCATS和INPUT_OCTOCATEYECOLOR环境变量。

https://help.github.com/en/articles/metadata-syntax-for-github-actions#inputs

答案 1 :(得分:1)

有点晚了,但是对于下一个,您也可以使用env字段:

name: CI

on: [push]

jobs:
  build:

runs-on: ubuntu-latest

steps:
  - name: Test the GH action
    uses: paramt/github-actions-playground@master
    env:
      test_var: "this is just a test"

将包含在创建docker的过程中,并且不带前缀INPUT_