目前我正在尝试将一个容器集成到我的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
该工作流产生了以下错误:
/__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
无法找到 yarn
。本地运行的 thomasowow/laravel-php:7.4
镜像已安装 yarn
。我测试了其他应该在docker镜像中可用的东西,也没有找到。看起来步骤没有在容器中执行。
文档中针对jobs.<job_id>.container
语法给出了以下说明:
运行作业中未指定容器的任何步骤的容器。
虽然有不使用容器的解决方案,但我更愿意使用它。
是否有人遇到过相同的问题或者知道我做错了什么?
解决方案
@DannyB 指出我的镜像包含以下入口点:
["/bin/bash", "--login", "-c", "tail -f /dev/null"]
这可能是导致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"]
通过将 SHELL
更改为 RUN npm ...
,问题得到解决,Github 能够在容器中正常运行。
目前我仍无法在不使用旧解决方案的情况下安装 yarn,但我认为还有其他方法可以解决。有人建议如何以清洁的方式做到这一点吗?
安装 node 和 yarn
我使用 这个答案 成功安装了 node
和 yarn
。
ENV NODE_VERSION=12.18.3
RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash
ENV NVM_DIR=/root/.nvm
RUN . "$NVM_DIR/nvm.sh" && nvm install ${NODE_VERSION}
RUN . "$NVM_DIR/nvm.sh" && nvm use v${NODE_VERSION}
RUN . "$NVM_DIR/nvm.sh" && nvm alias default v${NODE_VERSION}
ENV PATH="/root/.nvm/versions/node/v${NODE_VERSION}/bin/:${PATH}"
RUN npm install -g yarn
尝试从办公室Node docker镜像中COPY。使用此解决方案,我能够使node
正常运行。但是npm
和yarn
运行时会出现错误。
COPY --from=node:12.18.3 /usr/local/bin/node /usr/bin/node
...