ビルド仕様
ビルド仕様には、ビルド・パイプラインがビルドの実行に使用するビルド・ステップおよび設定が含まれています。
ビルド仕様は、YAMLで記述されます。デフォルトでは、ビルド仕様はプライマリ・ビルド・ソース・ディレクトリのルートにあり、ビルド・パイプラインの実行時に使用されます。このファイルは、build_spec.ymlまたはbuild_spec.yamlという名前です。ビルド仕様がルート・ディレクトリに存在しない場合は、マネージド・ビルド・ステージを追加するときにファイルの相対パスを指定する必要があります。
ビルド仕様は、次のセクションで構成されています:
- ビルド・ランナーの構成。
- 環境変数の設定。
- 入力アーティファクト。
- 順番に実行するステップ。
- 出力アーティファクト。
ビルド仕様の構文
version: 0.1
component: build
timeoutInSeconds: 10000
shell: bash
failImmediatelyOnError: true
env:
variables:
key: "value"
key: "value"
vaultVariables:
key: "secret-id"
exportedVariables:
- variable
- variable
- variable
inputArtifacts:
- name: artifact-name
type: GENERIC_ARTIFACT
artifactId: "artifact-ocid"
registryId: OCID of the Artifact Registry
path: path of the artifact in the Registry
version: version of the artifact
location: target-location
- name: artifact-name
type: STAGE_ARTIFACT
location: target-location
- name: artifact-name
type: URL
url: downloadable link
location: target-location
steps:
- type: Command
name: step-name
shell: shellType
timeoutInSeconds: 650
failImmediatelyOnError: true
command: command
onFailure:
- type: Command
command: |
command
command
timeoutInSeconds: 400
- type: Command
name: step-name
command: |
command
command
command
onFailure:
- type: Command
command: |
command
timeoutInSeconds: 400
outputArtifacts:
- name: artifact-name
type: artifact-type
location: source-location
sudo
isn't available on the build runner host.スーパーユーザー権限が必要な場合は、rootユーザーとしてビルド・ステップを実行します。ビルド仕様のパラメータ
次に、ビルド仕様のパラメータとその詳細を示します:
パラメータ | 説明 |
---|---|
version |
必須。ビルド仕様のバージョンを示します。バージョンが存在しないか無効であると、ビルド・ステージは失敗します。 サポートされる値は |
component |
必須。DevOpsの特定のコンポーネントを示します。値が存在しないか無効であると、ビルドは失敗します。 サポートされる値は |
timeoutInSeconds |
オプション。ビルド仕様ファイル全体のタイムアウトを指定します。各ステップには、オプションで独自のタイムアウト値を指定することもできます。 値を指定しない場合、デフォルト値の8時間が使用されます。許可される最大値は8時間です。 |
shell |
オプション。ビルド仕様のグローバル・レベルで使用するシェルを指定します。値は、オプションでステップ・レベルでオーバーライドできます。 許可される値は |
failImmediatelyOnError
|
オプション。ステップ内のいずれかのコマンドがゼロ以外の終了値で失敗した場合にビルドを続行する必要があるかどうかを指定します。指定しない場合、デフォルト値はfalse で、ステップは続行されます。使用可能な値はtrue およびfalse です。OCIでは、この属性の値をtrue に設定することをお薦めします。 |
env |
オプション。カスタム変数を定義できます。3つのタイプの変数がサポートされます:
|
inputArtifacts |
オプション。現在のビルド・ステージの実行に必要な入力アーティファクトのリストを定義するために使用されます。 次のタイプの入力アーティファクトがサポートされます:
パラメータは次のとおりです:
ノート: |
steps |
必須。このセクションでは、実行する必要があるステップのリストを定義します。
|
outputArtifacts |
オプション。ビルド・ステージで生成されたアーティファクトを指定します。このセクションの出力として生成されたアーティファクトは、現在のビルド実行の存続期間中保存されます。これらは、ビルド・パイプラインの後続のステージで使用できます。
|
ステップのタイプ
コマンド
属性名 | 説明 |
---|---|
command |
単一行と複数行の両方のコマンドがサポートされます。1つのステップで指定されているすべてのコマンドは、同じシェル・セッションで実行されます。steps/*/shell の値に基づいて、コマンドはshellまたはbashのいずれかになります。 フェイル・ファストは有効になっていません。ステップの成功については、ステップの最終コマンドの出力が考慮されます。最終コマンドの終了コードが0の場合、ステップは成功とみなされます。 |
timeoutInSeconds (オプション) |
ステップのタイムアウトを指定します。指定しない場合、値はグローバルtimeoutInSeconds パラメータから継承されます。許可される最大値は8時間です。 |
shell (オプション) |
現在のステップのシェル・タイプを指定します。指定しない場合、値はグローバルshell パラメータから継承されます。許可される値は/bin/sh およびshell です。 |
onFailure (オプション) |
ビルド・ステージを正常に終了するために失敗時に実行する必要があるステップのリスト。対応するステップが失敗し、実行後にビルド仕様が終了した場合に実行します。 失敗の処理は、ビルド・ステージのステータスに影響しません。いずれかのステップが失敗した場合、ビルド・ステージのステータスは |
failImmediatelyOnError (オプション) |
ステップ内のいずれかのコマンドがゼロ以外の終了値で失敗した場合にビルドを続行する必要があるかどうかを指定します。指定しない場合、デフォルト値はfalse で、ステップは続行されます。使用可能な値はtrue およびfalse です。OCIでは、この属性の値をtrue に設定することをお薦めします。
|
脆弱性監査
脆弱性監査は、アプリケーションとその依存関係の脆弱性を示します。OCI DevOpsサービスを使用してビルドを実行するときに、コード・リポジトリへの新しいコミットに対してコード・スキャンを開始できます。脆弱性監査は、「マネージド・ビルド」ステージで行われます。
ビルド仕様ファイルでは、タイプVulnerabilityAudit
の脆弱性監査ステップが追加され、DevOpsビルド・パイプラインでコード・スキャンのビルド実行中に使用されます。このステップの属性は次のとおりです:
属性名 | 説明 | パラメータ化された値のサポート |
---|---|---|
name (オプション) |
ステップの名前。 | 該当なし |
vulnerabilityAuditName (オプション) |
脆弱性監査リソースの名前。 | はい |
vulnerabilityAuditCompartmentId (オプション)デフォルトは |
監査リソースを作成する必要があるコンパートメントのOCID。 | はい |
knowledgeBaseId (必須) |
脆弱性監査リソースの詳細を保持するためのプレースホルダ/タグのOCID。脆弱性監査リソースの親リソース。 | はい |
configuration/buildType (必須) |
ビルド・ツール・タイプ。 | 該当なし |
configuration/pomFilePath (必須) |
pom.xmlファイルの場所。 | はい |
configuration/packagesToIgnore (オプション) |
脆弱性監査の実行中にスキャン結果を計算するときに無視するJavaパッケージのリスト。 | 該当なし |
configuration/maxPermissibleCvssV2Score (オプション)デフォルトは0.0です |
脆弱性監査で許可される最大v2 CVSSスコア。この構成を超えた場合、ビルドをFailed としてマークする必要があります。 |
該当なし |
configuration/maxPermissibleCvssV3Score (オプション)デフォルトは0.0です |
脆弱性監査で許可される最大v3 CVSSスコア。この構成を超えた場合、ビルドをFailed としてマークする必要があります。 |
該当なし |
freeFormTags (オプション) |
キーと値のペアを受け入れます。 | 該当なし |
事前定義済システム変数
DevOpsには、ビルド仕様の環境変数など、使用可能なデフォルト値を持つ事前定義済システム変数のセットがあります。
変数 | 説明 |
---|---|
OCI_STAGE_ID |
現在のステージのOCID。 |
OCI_PIPELINE_ID |
現在のビルド・パイプラインのOCID。 |
OCI_BUILD_RUN_ID |
現在のビルド実行のOCID。 |
OCI_TRIGGER_COMMIT_HASH |
現在のトリガーのコミット・ハッシュ。 |
OCI_TRIGGER_SOURCE_BRANCH_NAME |
ビルドをトリガーするブランチ。 |
OCI_TRIGGER_SOURCE_URL |
ビルドをトリガーしたリポジトリURL |
OCI_TRIGGER_EVENT_TYPE |
イベントを開始したトリガー。 |
OCI_PRIMARY_SOURCE_DIR |
ビルドのデフォルトの作業ディレクトリ(プライマリ・ソースの作業ディレクトリ)。 |
OCI_WORKSPACE_DIR |
作業ディレクトリの値。デフォルト値として/workspace を含みます。 |
${OCI_WORKSPACE_DIR}/<source-name> |
ビルド・ソース・ディレクトリ・パス。
|
OCI_BUILD_STAGE_NAME |
ビルド・ステージ名。 |
OCI_PRIMARY_SOURCE_NAME |
プライマリ・ビルド・ソース名。 |
OCI_PRIMARY_SOURCE_COMMIT_HASH |
現在のビルド実行で使用されるプライマリ・ビルド・ソースのコミット・ハッシュ。 |
OCI_PRIMARY_SOURCE_URL |
プライマリ・ビルド・ソースのURL。 |
OCI_PRIMARY_SOURCE_BRANCH_NAME |
現在のビルド実行で使用されるプライマリ・ビルド・ソースのブランチ。 |
ビルド仕様の例
例1:
version: 0.1
component: build
timeoutInSeconds: 1000
shell: bash
steps:
- type: Command
name: "Build app"
command: |
mvn clean install
例2:
version: 0.1
component: build
timeoutInSeconds: 6000
shell: bash
failImmediatelyOnError: true
env:
exportedVariables:
- BuildServiceDemoVersion
steps:
- type: Command
name: "Build Source"
timeoutInSeconds: 4000
failImmediatelyOnError: true
command: |
echo $PATH
mvn clean install
- type: Command
timeoutInSeconds: 400
name: "Dockerizer"
command: |
BuildServiceDemoVersion=`echo ${OCI_BUILD_RUN_ID} | rev | cut -c 1-7`
echo $BuildServiceDemoVersion
docker build -t build-service-demo
- type: VulnerabilityAudit
name: "Scan my maven repo"
vulnerabilityAuditName: Report-${buildRunId}
vulnerabilityAuditCompartmentId: ocid1.compartment.oc1.iad.restoftheocid
knowledgeBaseId: ocid1.knowledgebase.oc1.iad.restoftheocid
configuration:
buildType: maven
pomFilePath: ./pom.xml
packagesToIgnore:
- "oracle.jdbc.*"
- "org.apache.logging.log4j:1.2"
maxPermissibleCvssV2Score: 5.0
maxPermissibleCvssV3Score: 5.1
freeFormTags:
key1: value1
key2: value2
outputArtifacts:
- name: build-service-demo
type: DOCKER_IMAGE
location: build-service-demo
- name: build-service-demo-kube-manifest
type: BINARY
location: deployment/app.yml
例3:
version: 0.1
component: build
timeoutInSeconds: 6000
shell: bash
# Variables
env:
variables:
"testEnv" : "testValue1"
vaultVariables:
docker_registry_password : <secret-ocid>
exportedVariables:
- patch_number
- build_Result
inputArtifacts:
- name: hello-dev-jar
type: STAGE_ARTIFACT
location: /workspace/Source/hello123.class
- name: public-artifact
type: URL
url: https://raw.githubusercontent.com/apache/kafka/trunk/README.md #URL must be publicly accessible
location: /workspace/Source/readme.md
- name: shell_script
type: GENERIC_ARTIFACT
artifactId: ocid1.genericartifact.oc1.iad.0.restoftheocid #appropriate policy is required for access
location: /workspace/Source/script.sh
- name: shell_script
type: GENERIC_ARTIFACT
registryId: ocid1.artifactrepository.oc1.iad.0.restoftheocid #appropriate policy is required for access
path: some_script.sh
version: 2.0
location: /workspace/Source/script.sh
steps:
- type: Command
name: "Build Source"
timeoutInSeconds: 4000
shell: /bin/sh
command: |
# oci cli pre configured with build pipeline resource principal
oci os ns get
javac HelloWorld.java
onFailure:
- type: Command
timeoutInSeconds: 400
shell: /bin/sh
command: |
echo "Handling Failure"
build_result=FAILURE
echo "Failure successfully handled"
timeoutInSeconds: 400
- type: Command
timeoutInSeconds: 400
name: "Dockerizer & Test"
command: |
docker build -t test-image .
onFailure:
- type: Command
command: |
echo "Handling Failure"
build_result=FAILURE
echo "Failure successfully handled"
timeoutInSeconds: 400
- type: Command
timeoutInSeconds: 400
name: "Dockerizer & Test"
command: |
build_result=SUCCESS
patch_number==`echo ${OCI_BUILD_RUN_ID} | rev | cut -c 1-7`
outputArtifacts:
- name: kube-manifest
type: BINARY
location: ${OCI_WORKSPACE_DIR}/Source/app.yml
- name: hello-dev-image
type: DOCKER_IMAGE
location: test-image
高パフォーマンスのJavaアプリケーションをビルドするために、ビルド・パイプラインでOracle GraalVMを使用できます。DevOpsビルド・パイプラインでOracle GraalVMをインストールしてを使用するには、ビルド仕様ファイルを更新する必要があります。詳細および例は、DevOpsビルド・パイプラインでのOracle GraalVMの使用を参照してください。