機械翻訳について

Unixシェル・コマンドの実行

ジョブを構成して、Unixシェル・スクリプトを実行するか、ビルドの実行時にコマンドを実行できます:

  1. ジョブの構成ページを開きます。

  2. 「ステップ」タブをクリックします。

  3. 「ステップの追加」から、「一般的なビルド・ツール」を選択し、「Unixシェル」を選択します。

  4. 「スクリプト」に、シェル・スクリプトまたはコマンドを入力します。

    スクリプトが実行され、ワークスペースが現在のディレクトリとして使用されます。 シェル・スクリプトが#!/bin/shなどのヘッダー行を指定しない場合、システム・シェルが使用されます。 また、ヘッダー行を使用して、Perl (#!/bin/perl)などの別の言語でスクリプトを記述したり、シェルが使用するオプションを制御したりできます。

    シェル・スクリプトでKubernetes、DockerおよびOCIcliコマンドを使用することもできます。 ビルドを実行する前に、ジョブのビルド・エグゼキュータ・テンプレートに必要なソフトウェアがあることを確認してください。

  5. 変数の値を表示し、ビルド・ログで入出力のリダイレクションを非表示にするには、「(-x)コマンドで変数を展開します。I/O redirectionを表示しません」オプションを選択します。

    コマンドをビルド・ログにそのまま表示する場合は、「(-v)コマンドを通常どおり表示」オプションを選択します。

  6. 「保存」をクリックします。

ヒント:

  • デフォルトでは、ビルドの実行時に、-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をコールするには、次のコマンドを使用します:

    コマンド バージョン

    python

    pythonコマンドは、ソフトウェア・パッケージに事前インストールされたOS固有のPythonバージョンを参照します:

    • Python 2 (OL7)

    • Python 3 (OL8)

    python2

    Python 2

    python3

    python3コマンドは、ソフトウェア・パッケージとともにインストールされたPython 3バージョンを参照します。

    pip

    pip of Python 3

    pip3

    pip of Python 3

  • シェル・コマンドを使用して外部Gitリポジトリをクローニングするには、外部Gitリポジトリの内部URLを使用します。 URLをコピーするには、Gitページを開き、「リポジトリ」ドロップダウン・リストから外部Gitリポジトリを選択します。 「クローン」メニューから、「クリップボードにコピー」 クリップボードにコピー・アイコン(「内部アドレスURLからHTTPSを使用してクローニング」)をクリックします。

    外部Gitリポジトリのクローン・メニュー

シェル・スクリプトでの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}