Tho*_*een 5 docker github-actions
目前,我正在尝试在我的 Github Actions 工作流程中实现一个容器。但是,我很难弄清楚如何在容器本身中运行步骤。
使用以下工作流程:
name: Laravel
on: pull_request
jobs:
laravel-checks:
runs-on: ubuntu-latest
container: thomasowow/laravel-php:7.4
steps:
- uses: actions/checkout@v2
- name: Yarn
run: |
yarn
Run Code Online (Sandbox Code Playgroud)
此工作流程会导致以下错误:
/__w/_temp/c399fe7d-6cd2-4cdc-bb06-acc829cddbb8.sh: 1: /__w/_temp/c399fe7d-6cd2-4cdc-bb06-acc829cddbb8.sh: yarn: not found
##[error]Process completed with exit code 127
Run Code Online (Sandbox Code Playgroud)
它无法找到yarn。thomasowow/laravel-php:7.4本地运行可用yarn。我已经用 docker 镜像中应该可用的其他东西对此进行了测试,但也没有找到它们。看起来这些步骤没有在容器中执行。
该文档对语法进行了以下说明jobs.<job_id>.container:
用于运行作业中尚未指定容器的任何步骤的容器
我知道有些解决方案无需使用容器即可工作,我更愿意使用它。
有人遇到同样的问题或者知道我做错了什么吗?
@DannyB 指出我的图像包含以下入口点:
["/bin/bash", "--login", "-c", "tail -f /dev/null"]
Run Code Online (Sandbox Code Playgroud)
这可能是 Github 无法在容器中正常运行的原因。
镜像中需要安装 nvm、node 和yarn
SHELL ["/bin/bash", "--login", "-c"]
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
RUN nvm install 12.18.3
RUN npm install -g yarn
CMD ["/bin/bash"]
Run Code Online (Sandbox Code Playgroud)
删除SHELL解决RUN npm ...了问题,Github 能够再次正确运行容器中的内容。
目前,如果没有旧的解决方案,我仍然无法安装纱线,但我认为还有其他方法可以做到这一点。有人建议如何以干净的方式做到这一点吗?
我能够使用此答案node获取并安装。yarn
/__w/_temp/c399fe7d-6cd2-4cdc-bb06-acc829cddbb8.sh: 1: /__w/_temp/c399fe7d-6cd2-4cdc-bb06-acc829cddbb8.sh: yarn: not found
##[error]Process completed with exit code 127
Run Code Online (Sandbox Code Playgroud)
COPY对办公室 Node docker 镜像进行了一些尝试。有了这个解决方案,我就可以开始node工作了。npm并且yarn也在运行但有错误。
["/bin/bash", "--login", "-c", "tail -f /dev/null"]
Run Code Online (Sandbox Code Playgroud)
问题似乎出在您的图像中,而不是您的 GitHub Actions 语法中。
您的入口点似乎是:
["/bin/bash", "--login", "-c", "tail -f /dev/null"]
Run Code Online (Sandbox Code Playgroud)
这与 GitHub Actions 的需求不兼容 - 因为它根本无法通过该入口点进入您的容器。
您可能需要将入口点更改为其标准/bin/sh或/bin/bash入口点。在您期望 GitHub Actions 能够处理它之前,请确保您可以在本地进行 bash 操作。
$ docker run --rm -it thomasowow/laravel-php:7.4 bash
Run Code Online (Sandbox Code Playgroud)
作为“容器沙箱”概念证明,您可以尝试以下操作,并查看它是否按照广告宣传的那样工作。
name: Experiment
on: [push]
jobs:
debug:
runs-on: ubuntu-latest
container: { image: alpine }
steps:
- run: uname -a
- run: cat /etc/alpine-release
- run: touch /hello
- run: ls /
Run Code Online (Sandbox Code Playgroud)
此外,您也许可以指示 GitHub Actions 使用不同的入口点,如下所示:
container:
image: thomasowow/laravel-php:7.4
options: "--entrypoint /bin/bash"
Run Code Online (Sandbox Code Playgroud)
但是,首先,您需要确保它在本地工作,如下所示:
$ docker run --rm -it --entrypoint='' thomasowow/laravel-php:7.4 yarn
Run Code Online (Sandbox Code Playgroud)
添加到答案,因为您添加了问题。大多数情况下,在 docker 镜像中安装东西应该是直接的,包括节点和纱线之类的东西。
虽然我不是节点用户,但我怀疑问题在于您正在使用nvm. 在其他语言(python、ruby)中,这些“版本管理器”被设计为在交互式 shell 中运行,了解用户的环境和启动脚本。在 docker 内部,您不需要任何版本管理器 - 因为您不需要多个版本。
寻找“普通”安装依赖项的方法,并避免使用 Dockerfile 中的版本管理器,我确信您的问题要么会消失,要么会简化为更简单的问题。
| 归档时间: |
|
| 查看次数: |
12838 次 |
| 最近记录: |