複数のコマンドを 1 つで実行する正しい方法は何ですかaction
?
例えば:
Python スクリプトを として実行したいのですがaction
。このスクリプトを実行する前に をインストールする必要がありますrequirements.txt
。
いくつかの選択肢が考えられます:
Dockerfile
コマンドを含む を作成しますRUN pip install -r requirements.txt
。- イメージを使用し
python:3
、内の引数を実行する前に、ファイルpip install -r requirements.txt
内のを実行します。entrypoint.sh
args
main.workflow
pip install
とpython 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 ステージにコピーされ、結果に対して任意のチェックを実行できるようになります。