首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Github操作在容器中运行步骤

Github操作在容器中运行步骤
EN

Stack Overflow用户
提问于 2020-08-18 16:31:28
回答 1查看 7.2K关注 0票数 5

目前,我正在尝试将一个contianer实现到我的Github操作工作流中。然而,我在弄清楚如何在容器本身中运行步骤时遇到了困难。

所使用的工作流如下:

代码语言:javascript
运行
复制
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

此工作流将导致以下错误:

代码语言:javascript
运行
复制
/__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

它无法找到yarnthomasowow/laravel-php:7.4在本地运行,yarn可用。我已经测试了其他的东西,应该在码头的形象,他们也没有找到。看起来这些步骤没有在容器中执行。

用于陈述如下:语法的文档jobs.<job_id>.container

在作业中运行尚未指定容器的任何步骤的容器

我知道有些解决方案不需要使用容器,我更愿意使用它。

有人有同样的问题或者知道我做错了什么吗?

解决方案

@DannyB指出,我的图像包含以下切入点:

代码语言:javascript
运行
复制
["/bin/bash", "--login", "-c", "tail -f /dev/null"]

这可能是Github无法正确运行容器中的东西的原因。

它们在映像中需要安装nvm、节点和纱线。

代码语言:javascript
运行
复制
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再次能够正确地运行容器中的东西。

目前,如果没有旧的解决方案,我仍然无法安装纱线,但我认为还有其他方法可以做到这一点。有人建议如何干净地做这件事吗?

安装节点和纱线

我能够使用nodeyarn安装这个答案

代码语言:javascript
运行
复制
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

有人试图从office图像中获取COPY。有了这个解决方案,我才能让node工作起来。npmyarn也在运行,但有错误。

代码语言:javascript
运行
复制
COPY --from=node:12.18.3 /usr/local/bin/node /usr/bin/node
...
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-18 18:26:55

问题似乎存在于您的映像中,而不是GitHub操作的语法中。

你的切入点似乎是:

代码语言:javascript
运行
复制
["/bin/bash", "--login", "-c", "tail -f /dev/null"]

这与GitHub操作所需的内容不兼容--因为它根本无法使用该入口点进入容器。

您可能需要将入口点更改为标准的/bin/sh/bin/bash入口点。在期望GitHub操作能够处理之前,请确保您可以在本地使用它。

代码语言:javascript
运行
复制
$ docker run --rm -it thomasowow/laravel-php:7.4 bash

作为“容器沙箱”概念的证明,您可以尝试下面的操作,并查看它是否如广告所示。

代码语言:javascript
运行
复制
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 /

此外,您还可以指示GitHub操作使用不同的入口点,如下所示:

代码语言:javascript
运行
复制
container: 
  image: thomasowow/laravel-php:7.4
  options: "--entrypoint /bin/bash"

但是,首先,您需要确保它在本地工作,如下所示:

代码语言:javascript
运行
复制
$ docker run --rm -it --entrypoint='' thomasowow/laravel-php:7.4 yarn

安装纱线的最新情况

加上答案,因为你加入了你的问题。大多数情况下,在码头映像中安装东西应该是直接的,包括节点和纱线。

虽然我不是节点用户,但我怀疑问题在于您使用的是nvm。在其他语言(python、ruby)中,这些“版本管理器”设计为在交互式shell中运行,了解用户的环境和引导脚本。在docker内部,您不需要任何版本管理器--因为您不需要多个版本。

寻找安装依赖关系的方法“普通香草”,避免Dockerfiles中的版本管理器,我相信您的问题会消失,或者简化为简单的问题。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63472909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档