Par*_*ram 9 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'
Run Code Online (Sandbox Code Playgroud)
在我的工作流程中,我通过了 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"
Run Code Online (Sandbox Code Playgroud)
所以应该有一个在工作流运行时创建的环境变量,对吗?但是当我运行这个简短的 python 脚本时:
import os
print(os.getenv('TEST_VAR'))
print("It works!")
exit(0)
Run Code Online (Sandbox Code Playgroud)
它打印:
None
It works!
Run Code Online (Sandbox Code Playgroud)
我认为我必须通过我的 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
Run Code Online (Sandbox Code Playgroud)
但是变量没有回显,也没有传递给pythons脚本..我错过了什么吗?当我尝试将 my 设置$TEMP_VAR为一段随机字符串时,它会被发送到 Python 脚本。这是代表我的错误还是 GitHub 操作未按预期工作?
这是测试仓库的链接
有点晚了,但对于下一个,您还可以使用该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"
Run Code Online (Sandbox Code Playgroud)
它将在创建 docker 期间包含在内,并且不带前缀传递INPUT_
我认为您正在尝试读取错误的环境变量名称。GitHub Actions 添加INPUT_到输入变量的名称。因此,请尝试以下操作:
print(os.getenv('INPUT_TEST_VAR'))
Run Code Online (Sandbox Code Playgroud)
从文档:
当您在工作流文件中指定操作的输入或使用默认输入值时,GitHub 会为输入创建一个名为 INPUT_ 的环境变量。创建的环境变量将输入名称转换为大写字母并用 _ 字符替换空格。
例如,如果工作流定义了 numOctocats 和 octocatEyeColor 输入,则操作代码可以使用 INPUT_NUMOCTOCATS 和 INPUT_OCTOCATEYECOLOR 环境变量读取输入的值。
https://help.github.com/en/articles/metadata-syntax-for-github-actions#inputs
通过在存储库中指定环境变量Settings -> Secrets,然后在工作流程中调用它们来保持环境变量的秘密:
例如,考虑运行一个R脚本然后运行一个Python脚本的工作流。首先,.github/workflows/my_job.yml注意MY_VAR变量,它指向一个存储的秘密${{ secrets.MY_VAR}}。其余的是标准代码(在 cron 上运行,指定 Ubuntu 操作系统和 Docker 映像,定义工作流程步骤)。
on:
schedule:
- cron: '0 17 * * *'
jobs:
my_job:
name: my job
env:
MY_VAR: ${{ secrets.MY_VAR }}
runs-on: ubuntu-18.04
container:
image: docker.io/my_username/my_image:my_tag
steps:
- name: checkout_repo
uses: actions/checkout@v2
- name: run some code
run: bash ./src/run.sh
Run Code Online (Sandbox Code Playgroud)
接下来,在组成工作流程的脚本中,您可以像在本地一样访问上面工作流程文件中指定的环境变量。
例如,在存储库中,我们假设src/run.sh调用一个R脚本,然后调用一个Python脚本。
访问R环境变量并存储为对象:
my_var <- Sys.getenv("MY_VAR")
.
.
.
Run Code Online (Sandbox Code Playgroud)
访问Python环境变量并存储为对象:
import os
my_var = os.getenv("MY_VAR")
.
.
.
Run Code Online (Sandbox Code Playgroud)
请参阅此处的文档。
| 归档时间: |
|
| 查看次数: |
3499 次 |
| 最近记录: |