在 GitHub Actions 中使用 docker 文件

Posted

技术标签:

【中文标题】在 GitHub Actions 中使用 docker 文件【英文标题】:Use of docker files in GitHub Actions 【发布时间】:2022-01-20 04:14:06 【问题描述】:

我想在 Github Action 中使用 pandoc 从 Markdown 文件生成 pdf。为此,我打算使用现有的 Docker 容器来提高性能。但不幸的是,我不能通过添加相应的容器引用(删除第 6 行中的 #)来简单地在原生 ubuntu-latestpandoc/latex:2.9 之间切换。在这种情况下,我收到了没有 pandoc 容器时不会发生的意外错误消息。

name: Execute_pandoc
on: [push]

jobs:
  Run_pandoc:
    runs-on: ubuntu-latest
    #container: pandoc/latex:2.16

    steps:
      - name: Illustrate the problem
        run: |
             echo "Hello World"
             dirlist=(`ls *`)

Run echo "Hello World"
Hello World
/__w/_temp/2ac5de2c-2847-4b00-8a97-ba3bb034898e.sh: line 2: syntax error: unexpected "("
Error: Process completed with exit code 2.

【问题讨论】:

为此使用操作是有意义的。您可以基于该 docker 映像创建自己的自定义操作,也可以尝试在市场上找到现有的操作。我看到那里已经有一个了:github.com/marketplace/actions/pandoc-document-converter 好吧,也许它更有效。但是为什么这个例子在这两种情况下都不起作用?我必须以不同的方式处理混凝土容器吗? 【参考方案1】:

你得到的语法错误是因为 shell 不理解你的命令。尝试设置不同的 shell 或更改命令。

请记住,在您的示例中,pandoc/latex 的基本映像是 alpine,它使用 ash。您可以简单地使用基于其他发行版的另一个 pandoc 图像。

这是一个例子:

name: Execute_pandoc
on: [push]

jobs:
  Run_pandoc:
    runs-on: ubuntu-latest
    container: pandoc/ubuntu-latex
    steps:
      - name: Illustrate the problem
        run: |
             echo "Hello World"
             dirlist=(`ls /*`)
             echo $dirlist[@]
        shell: bash

【讨论】:

以上是关于在 GitHub Actions 中使用 docker 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 GitHub Actions 中构建的 Dockerfile 中使用 github 令牌并尝试克隆私有存储库?

在 Windows 上的 GitHub Actions 中缓存依赖项

如何在 GitHub Actions 中使用 env 文件?

在 GitHub Actions 中使用 docker 文件

在 Github Actions 中使用 Powershell 的输出

Github Actions生成 secrets