Unixシェル・コマンドの実行
ジョブを構成して、Unixシェル・スクリプトを実行するか、ビルドの実行時にコマンドを実行できます:
-
ジョブの構成ページを開きます。
-
「ステップ」タブをクリックします。
-
「ステップの追加」から、「一般的なビルド・ツール」を選択し、「Unixシェル」を選択します。
-
「スクリプト」に、シェル・スクリプトまたはコマンドを入力します。
スクリプトが実行され、ワークスペースが現在のディレクトリとして使用されます。 シェル・スクリプトが
#!/bin/shなどのヘッダー行を指定しない場合、システム・シェルが使用されます。 また、ヘッダー行を使用して、Perl (#!/bin/perl)などの別の言語でスクリプトを記述したり、シェルが使用するオプションを制御したりできます。シェル・スクリプトでKubernetes、DockerおよびOCIcliコマンドを使用することもできます。 ビルドを実行する前に、ジョブのビルド・エグゼキュータ・テンプレートに必要なソフトウェアがあることを確認してください。
-
変数の値を表示し、ビルド・ログで入出力のリダイレクションを非表示にするには、「(-x)コマンドで変数を展開します。I/O redirectionを表示しません」オプションを選択します。
コマンドをビルド・ログにそのまま表示する場合は、「(-v)コマンドを通常どおり表示」オプションを選択します。
-
「保存」をクリックします。
ヒント:
-
デフォルトでは、ビルドの実行時に、
-exオプションを使用してシェルを起動します。 これにより、すべてのコマンドが実行前に印刷されます。 いずれかのコマンドがゼロ以外の終了コードで終了すると、ビルドは失敗します。 この動作を変更するには、シェル・スクリプトに#!/bin/...行を追加します。 -
長いスクリプトがある場合は、スクリプト・ファイルを作成してGitリポジトリに追加し、
bash -ex /myfolder/myscript.shなどのコマンドを使用して実行します。 -
Python 3を実行するには、venvを使用して分離された環境を作成します。
https://docs.python.org/3/library/venv.htmlを参照してください。たとえば、仮想環境を作成するには、次のコマンドをUnixシェルのビルド・ステップとして追加します:
pip3 list cd $WORKSPACE python3 -m venv mytest cd mytest/bin ./pip3 list ./pip3 install --upgrade pip requests setuptools selenium ./pip3 list ./python3 -c 'import requests; r=requests.get('\''https://www.google.com'\''); print(r.status_code)' ./pip3 uninstall -y requests ./pip3 list - Python 3機能を使用してジョブを構築するには、ビルド・エグゼキュータ・テンプレートにデフォルトで含まれているPython 3パッケージを使用します。 デフォルトで使用できない特定の機能が必要な場合は、その機能を持つPython 3バージョンをビルド・エグゼキュータ・テンプレートに追加する必要があります。
-
ジョブのbuild executorテンプレートでPython 2とPython 3の両方を使用できる場合、Pythonをコールするには、次のコマンドを使用します:
コマンド バージョン pythonpythonコマンドは、ソフトウェア・パッケージに事前インストールされたOS固有のPythonバージョンを参照します:-
Python 2 (OL7)
-
Python 3 (OL8)
python2Python 2
python3python3コマンドは、ソフトウェア・パッケージとともにインストールされたPython 3バージョンを参照します。pippipof Python 3pip3pipof Python 3 -
-
シェル・コマンドを使用して外部Gitリポジトリをクローニングするには、外部Gitリポジトリの内部URLを使用します。 URLをコピーするには、Gitページを開き、「リポジトリ」ドロップダウン・リストから外部Gitリポジトリを選択します。 「クローン」メニューから、「クリップボードにコピー」
(「内部アドレスURLからHTTPSを使用してクローニング」)をクリックします。

シェル・スクリプトでのDocker-In-Dockerの使用
VB Studioでは、Docker-in-Docker機能は、リング・コンテナと呼ばれるメソッドを使用して実装されます。つまり、ビルドによってデプロイメントVM Docker環境にイメージおよびコンテナが作成されます。 複数のDockerエグゼキュータが同じデプロイメントVMを共有するため、イメージおよびコンテナはビルド間で共有されます。
ノート:
組織のビルドでDockerエグゼキュータが使用され、これらのビルドでDockerイメージおよびDockerコンテナが作成される場合、これらはデプロイメントVMのDocker環境によって管理されます。 これにより、ビルドは他のビルドからイメージおよびコンテナと対話できます。 プロジェクトに機密データが含まれていて、そのビルドをVMで分離して実行する必要がある場合は、かわりにVMエグゼキュータを使用してビルドを設定する必要があります。
ビルド内のシェル・スクリプトでdocker rm $(docker container -q)などの単純なコマンドを使用すると、ほかのビルドによって作成されたコンテナが強制終了される可能性があります。 これを回避するには、次の推奨事項に従って、Dockerイメージおよびコンテナを作成および削除します:
- Dockerコンテナを作成する場合は、コンテナ・ラベルに$TASKIDを追加して一意の名前を使用します。 これにより、ビルドによって作成されたコンテナが共有コンテナと区別されます。
- 作成されたコンテナは、ビルドの対象範囲にする必要があります。 ビルドが完了したら、停止および削除する必要があります。
- ビルドで作成されたイメージは、すべてのビルドでイメージの再作成を回避するために、多くのビルドで使用できます。 ただし、デプロイメントVM内のすべてのディスク領域を消費しないように注意してください。
- 「実行しない」は、all Dockerイメージを削除する
docker rmi $(docker image -q)などのDockerコマンドを発行します。 かわりに、docker rmi <my_image>などのコマンドを使用して、ビルドによって作成された「特定のイメージ」のみを削除します。 - 「実行しない」は、all Dockerコンテナを停止および削除する
docker stop $(docker ps -q)やdocker rm $(docker ps -q)などのDockerコマンドを発行します。かわりに、ビルドによって作成された「特定のコンテナ」を停止および削除する
docker stop <my_container>やdocker rm <my_container>などのコマンドを使用します。次に、コンテナ
some_name_$TASKIDを使用し、"_$TASKID"を名前に追加した例を示します。 $TASKIDをコンテナ名とともに使用すると、ジョブに固有であり、他のタスクには影響しないことを確認できます:DOCKER_IMAGE=some_image # Pull and run the container docker pull ${DOCKER_IMAGE} CONTAINER_ID=$(docker run --network=host --name some_name_$TASKID -it -d ${DOCKER_IMAGE}) # Use your container # Stop and remove the container docker stop ${CONTAINER_ID} docker rm ${CONTAINER_ID}