Str*_*ter 14 continuous-integration docker github-actions
Github Actions 允许使用 Docker 容器来运行作业,但它似乎不允许为此容器映像提供动态值(使用环境变量)。
这有效(不是所需的解决方案):
jobs:
pytest-test:
container:
image: ghcr.io/ashrafgt/test:latest ...
Run Code Online (Sandbox Code Playgroud)
这不起作用(所需的解决方案):
jobs:
pytest-test:
container:
# env variables defined at the start of the workflow
image: ${{ env.REGISTRY_NAME }}/test:${{ env.IMAGE_TAG }}
...
Run Code Online (Sandbox Code Playgroud)
给出这个错误:
Invalid workflow file : .github/workflows/workflow.yaml
The workflow is not valid. Unrecognized named-value: 'env'. Located at position 1 within expression: env.REGISTRY_NAME
Run Code Online (Sandbox Code Playgroud)
除了执行 a 之外,还有其他方法可以做到这一点吗run: docker run ...?
在此示例中,我尝试构建并推送 Docker 映像(用当前提交 SHA 标记),然后使用相同的映像来运行单元测试:
name: Main CI Pipeline
on: [push]
env:
REGISTRY_NAME: ghcr.io/${{ github.repository_owner }}
REGISTRY_USERNAME: ${{ github.actor }}
REGISTRY_PASSWORD: ${{ secrets.GITHUB_TOKEN }}
IMAGE_TAG: ${{ github.sha }}
jobs:
docker-build:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v2
- uses: docker/setup-buildx-action@v1
- uses: docker/login-action@v1
with:
registry: ${{ env.REGISTRY_NAME }}
username: ${{ env.REGISTRY_USERNAME }}
password: ${{ env.REGISTRY_PASSWORD }}
- uses: docker/build-push-action@v2
with:
tags: ${{ env.REGISTRY_NAME }}/test:${{ env.IMAGE_TAG }}
push: true
pytest-test:
needs: docker-build
runs-on: ubuntu-latest
permissions:
contents: read
packages: read
container:
image: ${{ env.REGISTRY_NAME }}/test:${{ env.IMAGE_TAG }}
steps:
- uses: actions/checkout@v2
- run: pytest
Run Code Online (Sandbox Code Playgroud)
请在此处找到完整的存储库。
完整的错误消息是:
Invalid workflow file : .github/workflows/workflow.yaml#L38
The workflow is not valid. .github/workflows/workflow.yaml (Line: 38, Col: 14): Unrecognized named-value: 'env'. Located at position 1 within expression: env.REGISTRY_NAME
Run Code Online (Sandbox Code Playgroud)
请在此处找到运行的 Github 操作。
仅使用container而不是container.image:
jobs:
pytest-test:
container: ${{ env.REGISTRY_NAME }}/test:${{ env.IMAGE_TAG }}
...
Run Code Online (Sandbox Code Playgroud)
使用docker://单步语法:
jobs:
pytest-test:
steps:
- uses: docker://${{ env.REGISTRY_NAME }}/test:${{ env.IMAGE_TAG }}
entrypoint: pytest
...
Run Code Online (Sandbox Code Playgroud)
两次修复尝试均失败,并出现与原始语法相同的错误。
我也很惊讶地发现这不起作用。然而,我偶然发现了这篇博文:https://aschmelyun.com/blog/using-docker-run-inside-of-github-actions/
它使用预定义的 github 操作来访问docker run. 因此,您可以将文件编辑为如下所示:
pytest-test:
needs: docker-build
runs-on: ubuntu-latest
steps:
- name: Check out the repo
uses: actions/checkout@v2
- name: Run Pytest inside Docker
uses: addnab/docker-run-action@v3
with:
image: ${{ env.REGISTRY_NAME }}/test:${{ env.IMAGE_TAG }}
options: -v ${{ github.workspace }}:/your_dockerfile_workdir
registry: ${{ env.REGISTRY_NAME }}
username: ${{ env.REGISTRY_USERNAME }}
password: ${{ env.REGISTRY_PASSWORD }}
run: pytest
Run Code Online (Sandbox Code Playgroud)
由于某种原因,在此操作中with.image确实接受变量
| 归档时间: |
|
| 查看次数: |
2604 次 |
| 最近记录: |