1 つの Github Actions Docker で複数のコマンドを実行する方法 質問する

1 つの Github Actions Docker で複数のコマンドを実行する方法 質問する

複数のコマンドを 1 つで実行する正しい方法は何ですかaction?

例えば:

Python スクリプトを として実行したいのですがaction。このスクリプトを実行する前に をインストールする必要がありますrequirements.txt

いくつかの選択肢が考えられます:

  • Dockerfileコマンドを含む を作成しますRUN pip install -r requirements.txt
  • イメージを使用しpython:3、内の引数を実行する前に、ファイルpip install -r requirements.txt内のを実行します。entrypoint.shargsmain.workflow
  • pip installpython myscript.pyの両方をargs

もう一つの例:

リポジトリに存在するスクリプトを実行し、2 つのファイル (その出力と既存のファイル) を比較したいと思います。

これは以下のプロセスを含みます2つのコマンド一方、最初の例では、pip installコマンドは建物のコマンドテストコマンドではなく。

質問:

以前の Docker の出力を含む、別のコマンド用の別の Docker を作成できますか?

Dockerfile、 、entrypoint内のコマンドの場所に関するガイドラインを探していますargs

ベストアンサー1

|属性にパイプを使用して複数のコマンドを実行できます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"

私のテストでは、 のようなシェル スクリプトを実行すると./myscript.sh`` が返されます。ただし、 のように実行するとbash myscript.sh -xe期待どおりに動作しました。

私のワークフローファイル|結果

これを実行する場合はDockerマシン内部、オプションは次のように句で実行できますrun

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

「別のコマンド用に別のDockerを作成し、以前のDockerの出力を含める」という点については、次のように使用できます。マルチステージビルドdockerfile に次のように記述します。

## 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結果がファイルに保存され、このファイルが第 2 ステージにコピーされ、結果に対して任意のチェックを実行できるようになります。

おすすめ記事