在我的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
但是这个变量没有被回显,也没有被传递给Python脚本。我是不是遗漏了什么?当我试图将我的$TEMP_VAR
设置为一个随机字符串时,它被is
发送到Python脚本。这是我的一个错误还是GitHub操作没有按预期工作?
这里是the link to the test repo
4条答案
按热度按时间cczfrluj1#
我想你读错了环境变量名。GitHub操作会在输入变量名中添加
INPUT_
。所以请尝试以下操作:从文档中:
当您在工作流文件中为操作指定输入或使用默认输入值时,GitHub会为输入创建一个名为INPUT_的环境变量。创建的环境变量会将输入名称转换为大写字母,并将空格替换为_字符。
例如,如果工作流定义了numOctocats和octocatEyeColor输入,则操作代码可以使用INPUT_NUMOCTOCATS和INPUT_OCTOCATEYECOLOR环境变量读取输入的值。
https://help.github.com/en/articles/metadata-syntax-for-github-actions#inputs
0g0grzrc2#
有点晚了,但对于下一个,您还可以使用
env
字段:在创建Docker和pass时将包含该前缀,但不使用前缀
INPUT_
g2ieeal73#
通过在存储库的
Settings -> Secrets
中指定env变量,然后在工作流中调用它们,来对它们进行保密:例如,假设一个工作流运行一个
R
脚本,然后运行一个Python
脚本。首先,在.github/workflows/my_job.yml
中,注意MY_VAR
变量,它指向一个存储在${{ secrets.MY_VAR}}
中的秘密。其余的是标准代码(在cron上运行,指定Ubuntu操作系统和Docker映像,定义工作流步骤)。接下来,在组成工作流的脚本中,您可以像在本地一样访问上面的工作流文件中指定的env var。
例如,在存储库中,假设
src/run.sh
调用R
脚本,然后调用Python
脚本。在
R
中,访问env var并将其存储为对象:在
Python
中,访问env var并存储为对象:请参阅docs here。
vxf3dgd44#
在我的例子中,没有一个答案起作用。下面是我如何解决它。
我首先必须使用${{secrets.FOO}}从github secrets中获取FOO变量,然后使用docker build --build-arg FOO=$FOO --build-arg BAR=$BAR -t将其传递到docker文件中。
然后在Docker文件中,我必须声明ARG和ENV在任何时候都可用。
重要的部分是RUN FOO=$FOOYarn构建,因为单独设置ENV不会将其传递到容器上。