デプロイメント構成ファイル

デプロイメント構成ファイルは、インスタンスにダウンロードするアーティファクトと、アーティファクトをコピーする必要がある場所を定義します。構成ファイルでは、デプロイメント用のコマンドの順序も指定します。

構成ファイルは、YAMLで記述されます。ファイルは、インラインで定義するか、インスタンス・グループ・デプロイメントの処理中に汎用アーティファクト参照として指定できます。

DevOps管理者は、次のアクションのためにデプロイメント構成ファイルを使用できます:

  • ターゲット・コンピュート・インスタンスに格納するアプリケーション・パッケージとその場所を指定します。
  • アプリケーションのデプロイに必要なステップを指定します。
  • デプロイメントに必要なユーザー定義変数または組込みの環境変数を指定します。

デプロイメント構成ファイルの構造

次に、デプロイメント構成ファイルの基本構造を示します:

{
version:     
component:   
env: 
    variables:        
timeoutInSeconds:  
files:  
  - source:
    destination:                              
steps:                              
  - stepType: Command 
    name:
    command:
    runAs:
    timeoutInSeconds:
  - stepType: Command 
}

次に、デプロイメント構成のパラメータとその詳細を示します:

パラメータ 説明
version 仕様ファイルのバージョン番号。値は1.0である必要があります。
component コンポーネント値。サポートされる値はdeploymentのみです。
shell オプション。デプロイメント仕様のグローバル・レベルで使用するシェルを指定します。値は、ステップ・レベルでオーバーライドできます。許可される値は/bin/shおよびbashです。指定しない場合、デフォルト値のbashが使用されます。
env: variables

デプロイメントの一部として実行される実行可能ファイルまたはbashコマンドで使用可能なユーザー定義の環境変数。

例: key1: static-valuekey2: ${PASSED_FROM_PIPELINE}

組込み変数も使用できます。競合を回避するために、組込み変数の先頭にはOCI_DEVOPSが付けられます。

組込み変数は:

  • OCI_DEVOPS_PIPELINE_ID
  • OCI_DEVOPS_STAGE_ID
  • OCI_DEVOPS_DEPLOYMENT_ID

envはオプション・パラメータです。

env: vaultVariables オプション。キーは文字列で、POSIX環境変数に準拠している必要があります。この値は、ボールトからのシークレットのOracle Cloud Identifier (OCID)である必要があります。ボールトとデプロイメント・パイプラインは、同じテナンシである必要があります。テナンシには、デプロイメント・パイプライン・リソースがシークレットにアクセスすることを許可する適切なポリシーが必要です。

この変数のスコープは、デプロイメント仕様ファイルの実行であり、ファイル内のすべてのステップで使用できます。これらの変数の値は、ボールトから取得され、デプロイメント仕様ファイル内のすべてのステップの環境変数として使用できます。

files

コピーする必要があるデプロイメント・パイプラインで定義されたアーティファクトと、それらのコピー先のターゲット・コンピュート・インスタンスの場所を指定します。このパラメータはオプション。

構成済ユーザー(デフォルトではocarun)は指定されたディレクトリを所有し、書込み権限と実行権限(chmod u+wrx)を必要とします。宛先フォルダが存在しない場合は、DevOpsデプロイメントによって作成されます。これを許可するには、ocarun (または構成済ユーザー)に、指定した宛先ディレクトリの親ディレクトリに対する書込み権限と実行権限が必要です。

たとえば、デプロイメント構成ファイルの宛先ディレクトリを/var/services/accountServiceとして割り当てる場合、構成済ユーザーに/var/servicesに対する書込み権限と実行権限を付与し、/varに対する実行権限を付与する必要があります。

files: source

アーティファクトのソースの場所を指定します。ソースは、ファイルまたはフォルダを参照できます。ソースがファイルである場合、そのファイルは宛先で定義されているフォルダにコピーされます。フォルダの場合、そのフォルダのすべてのコンテンツが宛先にコピーされます。ソースは相対パスを使用します。そのルートは1つ以上のアーティファクトのルート・フォルダです。

ファイル・タイプ拡張子を含む、アーティファクトの完全な名前を指定します。たとえば、ソースのファイルがtest.shの場合、アーティファクト・パスはtest.shまたはfolder-name/test.sh (ファイルがフォルダ内にある場合)である必要があります。

たとえば、汎用アーティファクトで単一のファイルrun.shを指定した場合、このファイルはソースのルート(/)・フォルダにダウンロードされます。汎用アーティファクトがapp_pkg.zipなどのアーカイブである場合、アーカイブ・コンテンツのルートはルート・フォルダです。

files: destination ソース・ファイルまたはフォルダをコピーする必要があるターゲット・フォルダを指定します。OCI DevOpsでは、デプロイメントのたびに宛先ディレクトリの内容が上書きされるため、宛先を本番コードのステージング・ディレクトリとみなすことをお薦めします。

次のデプロイメント仕様の例では、2つのディレクトリが示されています。宛先ディレクトリは/var/ocarun_staging/app1_staging_folderで、本番ディレクトリはvar/ocarun_prod/main_appです。

steps デプロイメント中に順次実行されるステップのリストを指定します。各ステップは、インスタンスで異なるプロセスとして実行されます。指定した組込み変数およびユーザー定義の環境変数は、すべてプロセスに渡されます。
steps: name ステップのユーザー定義名。
steps: command

シェル・コマンドまたはシェル実行可能ファイル。

filesパラメータが構成ファイルで指定されている場合、実行可能ファイルの場所のパスは、/genericArtifactDemo/start.shなどの絶対パスになります。filesパラメータが指定されていない場合、相対パスを使用して実行可能ファイルの場所を指定します。相対パスでは、デプロイメントの作業フォルダを参照します。アーティファクトは、ダウンロードされ、デプロイメントの現在の作業フォルダに抽出されます。

単一行と複数行の両方のコマンドがサポートされます。1つのステップで指定されているすべてのコマンドは、同じシェル・セッションで実行されます。steps/*/shellの値に基づいて、コマンドはshellまたはbashのいずれかになります。フェイル・ファストは有効になっていません。ステップの成功については、ステップの最終コマンドの出力が考慮されます。最終コマンドの終了コードが0の場合、ステップは成功とみなされます。複数行のコマンドは、bashスクリプトのように機能します。複数行のコマンドでフェイル・ファストを行うには、set -e \n <rest of the commands> (bashスクリプトの場合)を使用して複数行のコマンドを指定し、失敗した最初のコマンドでスクリプトが終了するようにします。

たとえば、コマンドwrongcommand \n /usr/bin/sudo -n -u root -E /home/opc/scripts/stop.sh \n echo \"Done\"set -e \n wrongcommand \n /usr/bin/sudo -n -u root -E /home/opc/scripts/stop.sh \n echo \"Done\"として指定した場合、スクリプトはwrongcommandで終了します。

steps: runAs 指定されたユーザーとしてステップを実行します。デフォルトでは、すべてのステップはocarunユーザーとして実行されます。
steps: timeoutInSeconds ステップを終了するタイムアウト期間を指定します。
steps: shell オプション。現在のステップのシェル・タイプを指定します。指定しない場合、値はグローバルshellパラメータから継承されます。許可される値は/bin/shおよびshellです。
steps: onFailure デプロイメント・ステージを正常に終了するために失敗時に実行する必要があるステップのリスト。onFailureセクションのコマンドは、対応するステップが失敗し、実行後にデプロイメント仕様が終了した場合にのみ実行されます。失敗の処理は、デプロイメント・ステージのステータスに影響しません。いずれかのステップが失敗した場合、デプロイメント・ステージのステータスはfailedのままです。

次に、デプロイメント構成ファイルの例を示します:

version: 1.0
component: deployment
runAs: ocarun
env: 
  variables: 
    version: ${appVersion}
  vaultVariables:
    SECRET_ID: "OCID of the secret in the vault"    
files: 
  - source: /
    destination: /var/ocarun_staging/app1_staging_folder
steps: 
  - stepType: Command
    name: Validate Variables
    command: echo "Version = ${version}:  Secret = ${SECRET_ID}"
    timeoutInSeconds: 60
  - stepType: Command
    name: Stop currently-running application
    command: cd /var/ocarun_prod/main_app; ./stop.sh
    timeoutInSeconds: 600
  - stepType: Command
    name: Clean old version of source code in prod directory
    command: echo "Perform suitable cleanup"
    timeoutInSeconds: 600
  - stepType: Command
    name: Copy new version of source code from staging directory to prod directory
    command: cp -R /var/ocarun_staging/app1_staging_folder/main_app /var/ocarun_prod/
    timeoutInSeconds: 600
  - stepType: Command
    name: Install application
    command: cd /var/ocarun_prod/main_app; ./install.sh
    timeoutInSeconds: 600
  - stepType: Command
    name: Run application
    command: cd /var/ocarun_prod/main_app; ./start.sh
    timeoutInSeconds: 600

2つのディレクトリ(ステージングおよび本番)を設定するcloud-initファイルの例:

#cloud-config
users:
  - default
  - name: ocarun
    sudo: ALL=(ALL) NOPASSWD:ALL

# Create two directories, one for staging and one for production.
runcmd:
  - [mkdir, -p, /var/ocarun_staging]
  - [mkdir, -p, /var/ocarun_prod]
  - [chown, ocarun, /var/ocarun_staging]
  - [chown, ocarun, /var/ocarun_prod]

ソースと宛先の複数のエントリを理解するための例:

version: 1.0
component: deployment
runAs: root
shell: bash
env:
  variables:
    version: ${appVersion}
  vaultVariables:
    docker_registry_password : <secret-ocid>  
files:
  # This section is to define how the files in the artifact is put on the compute instance.
  # Multiple entires are supported using a separate source destination section for every entry.
  - source: /
    destination: /genericArtifactDemo
  - source: /tmp/file1
    destination: /var/applicationPath/someDir1
  - source: /tmp/file2
    destination: /var/applicationPath/someDir2  
steps:
  # This section is to define the scripts that each step runs on the instance after file copy.
  - stepType: Command
    name: Install Apache Web Server
    command: /genericArtifactDemo/install_dependencies.sh
    runAs: root
    timeoutInSeconds: 600
  - stepType: Command
    name: Stop Web Server
    command: /genericArtifactDemo/stop.sh
    runAs: root
    timeoutInSeconds: 60
  - stepType: Command
    name: Install New Version of Software
    command: /genericArtifactDemo/install.sh
    runAs: root
    timeoutInSeconds: 60
  - stepType: Command
    name: Start Web Server
    command: /genericArtifactDemo/start.sh
    runAs: root
    timeoutInSeconds: 60
  - stepType: Command
    name: stop and install
    command: |
      /scripts/stop.sh
      echo "Done stop.sh.."
      /scripts/install_dependencies.sh
      echo "Done install_dependencies.sh.."
      /scripts/install.sh
      echo "Done install.sh.."
    timeoutInSeconds: 1200
    runAs: root
    shell: /bin/sh
    onFailure:
       - stepType: Command
         command: /scripts/recovery_steps.sh
         name:"OnFailure step"
         timeoutInSeconds: 1200

デプロイメント構成ファイルの実行

DevOpsサービスは、RunCommandエージェントを使用して、ターゲット・コンピュート・インスタンスの構成ファイルで指定されているコマンドを実行します。RunCommandプラグインの有効化の詳細は、インスタンス・グループへのデプロイの「前提条件」を参照してください。デプロイメント構成ファイルにプレースホルダが含まれている場合は、デプロイメントのパラメータ・リストで定義された値に置き換えられます。パラメータの構成を参照してください。