github actions 将文件挂载为容器中的卷

aas*_*yas 14 github docker github-actions

我有以下回购结构。

\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .cosmos\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 .config\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .github\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 workflows\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 plan.yml\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 update.yml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .gitignore\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 assets\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 1.png\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 2.png\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 3.png\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 us-west-2\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 applications\n    \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test.json\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 cluster-config.json\n
Run Code Online (Sandbox Code Playgroud)\n

以及以下 GH Action yaml 文件。

\n

计划.yml

\n
name: Cosmos Plan\n\non:\n  pull_request:\n    paths:\n      - "**/applications/*.json"\n      - "**/cluster-config.json"\n\njobs:\n  find:\n    name: Find edited clusters\n    runs-on: ubuntu-latest\n    outputs:\n      new: ${{ steps.find.outputs.new }}\n      modified: ${{ steps.find.outputs.modified }}\n      anyNew: ${{ steps.find.outputs.anyNew }}\n      anyModified: ${{ steps.find.outputs.anyModified }}\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v2\n\n      - name: Checkout cosmos-find action\n        uses: actions/checkout@v2\n        with:\n          repository: this/cosmos-find\n          ref: refs/tags/v3\n          path: ./.github/actions/cosmos-find\n          token: ${{ secrets.COSMOS_PAT }}\n\n      - name: Cosmos find\n        id: find\n        uses: ./.github/actions/cosmos-find\n\n  create:\n    needs: find\n    if: ${{ needs.find.outputs.anyNew == \'true\' }}\n    name: Create ${{ matrix.cluster }} cluster (plan)\n    runs-on: ubuntu-latest\n    container:\n      image: ghcr.io/this/cosmos:v2.3.0-prerelease\n      credentials:\n        username: ${{ github.actor }}\n        password: ${{ secrets.COSMOS_PAT }}\n      volumes:\n        - ${{ github.workspace }}/.cosmos/.config:/github/home/.cosmos/.config\n    strategy:\n      fail-fast: false\n      matrix: ${{fromJson(needs.find.outputs.new)}}\n    steps:\n      - name: Check cosmos config file\n        run: |\n          ls -al /github/home/.cosmos/.config \n          cat  /github/home/.cosmos/.config\n
Run Code Online (Sandbox Code Playgroud)\n

我想将 .cosmos/.config 文件从当前存储库安装到我正在运行操作的容器。

\n

根据此 Github 工作流程语法https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idcontainervolumes,我应该能够做到这一点。

\n

我在 github 操作 yml 文件中使用以下代码块指定了卷。

\n
container:\n  image: ghcr.io/this/cosmos:v2.3.0-prerelease\n  credentials:\n    username: ${{ github.actor }}\n    password: ${{ secrets.COSMOS_PAT }}\n  volumes:\n    - ${{ github.workspace }}/.cosmos/.config:/github/home/.cosmos/.config\n
Run Code Online (Sandbox Code Playgroud)\n

我可以看到在初始化容器阶段,GH Action 能够成功挂载文件。(以下日志)

\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .cosmos\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 .config\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .github\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 workflows\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 plan.yml\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 update.yml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .gitignore\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 assets\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 1.png\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 2.png\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 3.png\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 us-west-2\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 applications\n    \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test.json\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 cluster-config.json\n
Run Code Online (Sandbox Code Playgroud)\n

但是当我尝试通过 GH Step 列出并定位该文件时Check cosmos config file,它告诉我它是一个目录。(错误和失败)

\n
Run ls -al /github/home/.cosmos/.config \n  ls -al /github/home/.cosmos/.config \n  cat  /github/home/.cosmos/.config\n  shell: sh -e {0}\ncat: /github/home/.cosmos/.config: Is a directory\ntotal 8\ndrwxr-xr-x 2 root root 4096 May 21 16:50 .\ndrwxr-xr-x 3 root root 4096 May 21 16:50 ..\nError: Process completed with exit code 1.\n
Run Code Online (Sandbox Code Playgroud)\n

我尝试通过提供完整路径将文件安装到本地 docker 容器上,并且没有任何问题。

\n

谢谢。

\n

小智 2

您应该能够通过缓存操作轻松地完成此操作。只需在一个作业中缓存该文件,然后在下一个作业中加载该缓存,如此处的示例所示

name: Caching Primes
Run Code Online (Sandbox Code Playgroud)

开:推

工作:构建:运行:ubuntu-latest

steps:
- uses: actions/checkout@v3

- name: Cache Primes
  id: cache-primes
  uses: actions/cache@v3
  with:
    path: prime-numbers
    key: ${{ runner.os }}-primes

- name: Generate Prime Numbers
  if: steps.cache-primes.outputs.cache-hit != 'true'
  run: /generate-primes.sh -d prime-numbers

- name: Use Prime Numbers
  run: /primes.sh -d prime-numbers
Run Code Online (Sandbox Code Playgroud)

  • 即使这有帮助并且是一个很好的提示,它也不能解决所描述的问题。如果代码适合所陈述的问题,答案可能会得到很大改善。谢谢! (2认同)