1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

DBB/zAppBuildについてのメモ - (3)zAppBuildビルド・スクリプト

Last updated at Posted at 2023-06-04

はじめに

ここではzAppBuildが提供するビルド・スクリプトについて見ていきます。

※当記事はzAppBuild V3.1.0をベースにしています。

関連記事

DBB/zAppBuildについてのメモ - (1)概要
DBB/zAppBuildについてのメモ - (2)zAppBuildプロパティー・ファイル
DBB/zAppBuildについてのメモ - (3)zAppBuildビルド・スクリプト
DBB/zAppBuildについてのメモ - (4)Metadata Store構成

zAppBuild全体像

image.png

ここでは上の赤字部分に着目してみます。

ビルド・スクリプトの確認

スクリプトの基本的なフローを大まかに追ってみます。

build.groovy

build.groovyがzAppBuildが提供する大元のスクリプトで、これがまず最初に実行されます。ここから、必要に応じて各言語ごとのビルド・スクリプトが実行されるという流れになっています。

1.initialize

メソッドinitializeBuildProcessにて必要な変数設定などを行います。

1-(1) parse incoming options and arguments

ここでは、スクリプト実行時の引数の解析が行われます。引数の解析にはCliBuilderクラスが使用されています。
参考: Class CliBuilder

1-(2) populate build properties

ここでは、build-confのプロパティー・ファイル、application-confのプロパティー・ファイルをそれぞれ読み込み、スクリプトの引数と合わせてプロパティーの設定を行います。

1-(3) create metadata store for this script

User Build以外の場合にmetadata storeのセットアップを行います。(User Buildの場合はmetadata storeは使用されない)

1-(4) handle -r,--reset option

resetオプションが指定された場合、metadata storeから情報を削除します。

1-(5) verify/create/clone the collections for this build

metadata store上にCollectionが無ければ作成します。
(UserBuildの場合はMetadata Storeが作成されていないのでCollectionも作成されません。)

2.create build list

ここでは、指定したオプションに応じたビルド対象となるプログラムのリストを作成します。
オプション等によってビルド対象のプログラムが変わってきます。例えば、User Buildの場合特定のプログラムをビルドすることになるので、引数で指定したプログラムがビルド対象になりますし、Full Buildの場合は含まれる全てのソースがビルド対象になります(application.propertiesのexcludeFileListに指定されたファイルは除外される)。

上のコードは、Full Buildの場合のビルド対象プログラム抽出部分です。

上のコードで、ビルド対象ソースのファイル名のリストを書き出し(⇒buildList.txt)を行っています。

上のコードで、fullBuildの場合にソースをスキャンしてcollectionをUpdateしています。

3.build programs in the build list

2.で作成したビルド対象のプログラムのリスト(buildList)に基づき、実際にビルドのスクリプトを実行していきます。

application-confのapplication.propertiesで指定したbuildOrderの順番に、ビルド用のスクリプトを実行していきます。

メソッドScriptMappings.getMappedList()を使って、buildListから実行しようとしているスクリプトに該当するプログラムのみ抽出します。たとえばCOBOL用のビルド・スクリプトを実行する際には、buildListからCOBOLソースのみを抽出します。

メソッドrunScript()を使用して、各言語ごとのビルド・スクリプト(Cobol.groovyなど)を実行します。

ScriptMappings.getMappedList()runScript()はDBBによって提供されるメソッドです。
参考: DBB APIs - Build properties

Cobol.groovy

ビルド対象のアプリケーションの中にCOBOLのソースが含まれている場合、build.groovyからCobol.groovyが呼び出されることになります。
ここではCOBOL用のビルド・スクリプトであるCobol.groovyの中身を追ってみたいと思います。

1.create language datasets

各言語ごとに必要なPDSデータセットを作成します。例えばソース配置用、ロード・モジュール配置用などです。
ここではDBB提供のCreatePDS()というメソッドが使用されています。これは、データセットが存在しない場合にのみ新規で作成されることになります。
参考: CreatePDS

2.sort the build list based on build file rank if provided

ここでは、1で作成されたビルド対象ソースのリストについて、ランクに応じてソートします(ランクはプロパティーcobol_fileBuildRankで指定されます)。
TreeMapオブジェクトでランクごとのファイルのリストを保持するようにしていますが、TreeMapに追加された値は内部で自動的に昇順ソートされます。
つまり、ランクの数値が低いソースほど優先度が高くなります。ランク付けされていないファイルはリストの最後にAppendされますので優先度は最下位となります。

3.iterate through build list

ここがソースをビルドする本体部分となります。以下のビルド処理を対象のソース・ファイルごとに実行することになります。

3-(1) configure dependency resolution

ソースと直接的な依存関係を持つファイル(COPYBOOKなど)を調べるためのResolverを作成します。

参考: How to manage build dependencies

3-(2) copy build file and dependency files to data sets

ターゲットのソースと、そのソースに直接的に依存関係のあるファイル(COPYBOOKなど)をzFSからPDSにコピーします。

VS CodeによるUserBuildの場合は、VS Code側で対象ソースの依存関係をサーチしてそのリストを作成し、それを引数で渡した上でzAppBuildを呼び出します。そのため、その受け渡されたファイル(userBuildDependencyFile)から依存関係のあるファイルを判別して、PDSにコピーすることになります。
FullBuildの場合は、各対象のソースごとにDBB提供のDependency Scanner機能を使ってソースをサーチして依存関係のあるファイル(COPYBOOKなど)を判別し、PDSにコピーすることになります。

PDSへのコピーは、DBB提供のCopyToPDSクラスが使用されます。

参考: z/OS commands

3-(3) Get logical file

コンパイル対象のソースについてのLogicalFileを生成します。LogicalFileというのは、そのソースファイルの属性情報を以下のような構造で保持しているオブジェクトです。言語、ファイルパス、依存関係のあるファイル、などの情報を含みます。

LogicalFile構造サンプル
{
   "cics": false,
   "dli": false,
   "file": "ISEConf2023_MySampleDBB01\/cobol\/TSUB03.cbl",
   "language": "COB",
   "lname": "TSUB03",
   "logicalDependencies": [
      {
         "category": "COPY",
         "library": "SYSLIB",
         "lname": "CPPARM03"
      }
   ],
   "mq": false,
   "sql": false
}

3-(4) create mvs commands

コンパイル対象のソースをPDSにコピーし、コンパイル用、および、リンク・エディット用のコマンド(JCLステップ相当)を生成します。

コンパイル・コマンドの生成

リンク・エディット・コマンド生成

※コンパイル・オプションについて
コンパイル・コマンド生成の中では、以下の関数でCOBOLのコンパイル・オプションがセットされます。

ターゲットのソースがCICSアプリ(isCICSがtrue)の場合はCICS用のオプションが追加され、SQLを含むアプリ(isSQLがtrue)の場合はSQL用のオプションが追加されます。
つまり、CICS提供のトランスレーターやDb2提供のプリコンパイラを使う構成になっている訳ではなく、言語環境提供の統合トランスレーターが使われることになります。

3-(5) execute mvs commands in a mvs job

JOBを開始します。以降のステップを1つのJOBとして実行します。

3-(6) compile the cobol program

先に生成したコンパイル・コマンドを実行します。

3-(7) link/edit

リンク・エディット対象のソースの場合、コンパイルに続けてリンク・エディット・コマンドを実行します。
(他のモジュールに静的リンクしたいソースについては、cobol_linkEditプロパティーでリンク対象外として設定しておくことで、リンク・エディットのステップをスキップできます)

3-(8) perform Db2 Bind only on User Build and perfromBindPackage property

Db2バインド処理対象のものについてはバインド処理を行います。

3-(9) clean up passed DD statements

JOBの終了処理を行います。ここまでのステップが1つのJOBとして実行されることになります。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?