如何 运行 将多个命令合而为一 Github 操作 Docker

How to run multiple commands in one Github Actions Docker

运行在一个 action 中使用多个命令的正确方法是什么?

例如:

我想运行一个python脚本作为action。在 运行 安装此脚本之前,我需要安装 requirements.txt.

我可以想到几个方案:

另一个例子:

我想 运行 我的存储库中存在的脚本,然后比较 2 个文件(它的输出和一个已经存在的文件)。

这是一个包含两个命令的过程,而在第一个示例中,pip install命令可以被视为一个构建命令 而不是测试命令。

问题:

我可以为另一个命令创建另一个 Docker,它将包含前一个 Docker 的输出吗?

我正在寻找 Dockerfileentrypointargs.

中命令位置的指南

您可以在 run 属性上使用管道 | 运行 多个命令。看看这个:

name: My Workflow

on: [push]

jobs:
  runMultipleCommands:
    runs-on: ubuntu-latest
    steps:
     - uses: actions/checkout@v1
     - run: |
        echo "A initial message"
        pip install -r requirements.txt
        echo "Another message or command"
        python myscript.py
        bash some-shell-script-file.sh -xe
     - run: echo "One last message"

在我的测试中,运行宁 shell 脚本像 ./myscript.sh returns ``。但是 运行 像 bash myscript.sh -xe 一样按预期工作。

My workflow file | Results

如果你想运行这个在docker机器里面,一个选项可能是运行一些像你这样的东西run 子句:

docker exec -it pseudoName /bin/bash -c "cd myproject; pip install -r requirements.txt;"

关于 "create another Docker for another command, which will contain the output of the previous Docker",您可以在 docker 文件上使用 multistage-builds。有些喜欢:

## First stage (named "builder")
## Will run your command (using add git as sample) and store the result on "output" file
FROM alpine:latest as builder
RUN apk add git > ./output.log

## Second stage
## Will copy the "output" file from first stage
FROM alpine:latest
COPY --from=builder ./output.log .
RUN cat output.log
# RUN your checks
CMD []

这样就把apk add git的结果保存到一个文件中,这个文件复制到第二阶段,可以运行对结果进行任意检查。