はじめに
ここでは、Metadata StoreとしてDb2 for z/OSを使用する場合の構成を行ってみます。
関連記事
DBB/zAppBuildについてのメモ - (1)概要
DBB/zAppBuildについてのメモ - (2)zAppBuildプロパティー・ファイル
DBB/zAppBuildについてのメモ - (3)zAppBuildビルド・スクリプト
DBB/zAppBuildについてのメモ - (4)Metadata Store構成
z/OS Unix File Systemを使用する場合
Metadata Storeとして Unix System Service上のファイル・システム(zFS)を使用する場合についての使用例を示します。
構成
特別な構成は不要です。
Metadata Storeとして使用されるディレクトリが含まれるzFSのサイズ、アクセス権にご注意ください。
zAppBuildでの使用例
Metadata Storeの種類の選択は、build-conf/build.properties
のプロパティーで指定します。Metadata StoreとしてUSSのファイルを使用する場合は、以下のプロパティーを指定します。
- metadataStoreType=file: Metadata StoreとしてUSSファイルを使用することを宣言しています。
- metadataStoreFileLocation=xxx: Metadataを格納するディレクトリを指定します。
metadataStoreFileLocationを指定しない場合、デフォルトでは$USER(ユーザーのホームディレクトリ)となります。
デフォルト設定の場合、例えばJENKIN1というユーザーを使用する場合、/u/JENKIN1がホームディレクトリだったとすると、/u/JENKIN1/.dbb/以下にメタデータが管理されます。
metadataディレクトリ/ファイル構造例
metadata
├── ISEConf2023_Jenkins01-main
│ └── buildresults
│ ├── build.20230314.210710.007
│ │ ├── attachments
│ │ │ ├── SAM1.log
│ │ │ └── SAM2.log
│ │ └── buildResult.json
│ ├── build.20230315.013654.036
│ │ ├── attachments
│ │ │ ├── SAM1.log
│ │ │ └── SAM2.log
│ │ └── buildResult.json
│ └── buildResults.json
├── ISEConf2023_MySampleDBB01-main
│ └── buildresults
│ ├── build.20230316.035546.055
│ │ ├── attachments
│ │ └── buildResult.json
│ ├── build.20230316.035619.056
│ │ ├── attachments
│ │ └── buildResult.json
│ ├── build.20230316.224132.041
│ │ ├── attachments
│ │ └── buildResult.json
│ ├── build.20230327.213205.032
│ │ ├── attachments
│ │ └── buildResult.json
│ ├── build.20230426.002832.028
│ │ ├── attachments
│ │ └── buildResult.json
│ ├── build.20230426.013217.032
│ │ ├── attachments
│ │ └── buildResult.json
│ ├── build.20230428.025801.058
│ │ ├── attachments
│ │ └── buildResult.json
│ ├── build.20230430.060058.000
│ │ ├── attachments
│ │ └── buildResult.json
│ ├── build.20230430.063537.035
│ │ ├── attachments
│ │ └── buildResult.json
│ ├── build.20230510.210017.000
│ │ ├── attachments
│ │ └── buildResult.json
│ ├── build.20230510.211034.010
│ │ ├── attachments
│ │ └── buildResult.json
│ ├── build.20230510.211244.012
│ │ ├── attachments
│ │ └── buildResult.json
│ ├── build.20230511.035332.053
│ │ ├── attachments
│ │ └── buildResult.json
│ ├── build.20230511.035507.055
│ │ ├── attachments
│ │ └── buildResult.json
│ ├── build.20230511.035745.057
│ │ ├── attachments
│ │ └── buildResult.json
│ ├── build.20230511.040010.000
│ │ ├── attachments
│ │ └── buildResult.json
│ └── buildResults.json
├── ISEConf2023_VSCode01-main
│ └── buildresults
│ ├── build.20230315.013811.038
│ │ ├── attachments
│ │ └── buildResult.json
│ ├── build.20230316.035252.052
│ │ ├── attachments
│ │ └── buildResult.json
│ └── buildResults.json
└── dbb_default
└── collections
├── ISEConf2023_Jenkins01-main
│ ├── ISEConf2023_Jenkins01
│ │ ├── ASM
│ │ │ └── ASAM1.asm.json
│ │ ├── COBOL
│ │ ├── COPYBOOK
│ │ ├── COPYLIB
│ │ ├── COPYLIB-MVS
│ │ ├── INCLUDELIB
│ │ ├── INCLUDELIB-MVS
│ │ ├── INCLUDES
│ │ ├── JCL
│ │ │ ├── DEBUG.jcl.json
│ │ │ └── RUN.jcl.json
│ │ ├── PLI
│ │ │ ├── PSAM1.pli.json
│ │ │ └── PSAM2.pli.json
│ │ ├── RESOURCES
│ │ ├── REXX
│ │ │ └── FIB.rexx.json
│ │ ├── REXXINC
│ │ ├── REXXLIB
│ │ ├── ansible
│ │ │ └── templates
│ │ ├── groovy
│ │ ├── multiroot
│ │ │ └── sam
│ │ ├── zapp.yaml.json
│ │ └── zowe
│ ├── collection.json
│ ├── logicalfiles.json
│ └── references.json
├── ISEConf2023_Jenkins01-main-outputs
│ ├── ISEConf2023_Jenkins01
│ │ └── ASM
│ ├── collection.json
│ ├── logicalfiles.json
│ └── references.json
├── ISEConf2023_MySampleDBB01-main
│ ├── ISEConf2023_MySampleDBB01
│ │ ├── cobol
│ │ ├── copybook
│ │ ├── images
│ │ └── logs
│ ├── collection.json
│ ├── logicalfiles.json
│ └── references.json
├── ISEConf2023_MySampleDBB01-main-outputs
│ ├── ISEConf2023_MySampleDBB01
│ ├── collection.json
│ ├── logicalfiles.json
│ └── references.json
├── ISEConf2023_VSCode01-main
│ ├── ISEConf2023_VSCode01
│ │ ├── cobol
│ │ ├── copybook
│ │ ├── images
│ │ └── zapp.yaml.json
│ ├── collection.json
│ ├── logicalfiles.json
│ └── references.json
└── ISEConf2023_VSCode01-main-outputs
├── ISEConf2023_VSCode01
│ └── cobol
├── collection.json
├── logicalfiles.json
└── references.json
Db2 for z/OSを使用する場合
Metadata Storeとして Unix System Service上のファイル・システム(zFS)を使用する場合について構成例、使用例を示します。
構成例
基本的には以下のガイドに従います。
Setting up Db2 as the build metadata database
前提として、使用するDb2サブシステム自体は構成され、稼働しているものとします。また、JDBC Type4 Driverでの接続が行える状態になっていることを前提とします。
0. 事前準備
Db2 for z/OS上にMetadataを格納するためのテーブルなどを作成する必要があります。ここでは、Db2 for z/OSの操作をWindows上のData Studioから行うことを想定しているので、Data StudioからDb2 for z/OSへの接続構成を行っておきます(Data Studioの構成自体は割愛します)。
ここでは、Wazi as a ServiceのStock Imageに含まれるDb2 for z/OSへの接続例を示します。Wazi as a Serviceへの接続の際はAT-TLSが使われることになりますので、TLS通信のための設定も必要になります。
(1)Db2接続情報確認
接続に必要な情報を確認します。
参考: DISPLAY DDF
-DBD1 DISPLAY DDF
DSNL080I -DBD1 DSNLTDDF DISPLAY DDF REPORT FOLLOWS: 019
DSNL081I STATUS=STARTD
DSNL082I LOCATION LUNAME GENERICLU
DSNL083I DBD1LOC EXPNET.DBD1LU1 -NONE
DSNL084I TCPPORT=8102 SECPORT=8102 RESPORT=8101 IPNAME=-NONE
DSNL085I IPADDR=::10.1.1.2
DSNL086I SQL DOMAIN=wazi01
DSNL105I CURRENT DDF OPTIONS ARE:
DSNL106I PKGREL = COMMIT
DSNL106I SESSIDLE = 001440
DSNL099I DSNLTDDF DISPLAY DDF REPORT COMPLETE
IEA631I OPERATOR IBMUSER NOW INACTIVE, SYSTEM=VS01 , LU=81293903
LOCATION名: DBD1LOC
TCPPORT: 8102
(2)CA証明書入手
AT-TLSで使用するCA証明書をData Studioから接続するWindowsにコピーします。
ここでは、common_cacert.cer
というファイル名で保存するものとします。
(3)トラスト・ストアの作成
上のCA証明書を取り込んだトラスト・ストアをkeytoolコマンドで作成します。
keytoolコマンド実行例
※途中パスワードを聞かれるのでパスワードを指定します。
C:\xxx\wazi01_Cert> keytool -import -file .\common_cacert.cer -alias waziCA -keystore waziTrustStore.jks
キーストアのパスワードを入力してください:
新規パスワードを再入力してください:
所有者: CN=STOCK_SELF_SIGNED_CERT, OU=ZOSVSI, O=International Business Machines, C=US
発行者: CN=STOCK_SELF_SIGNED_CERT, OU=ZOSVSI, O=International Business Machines, C=US
シリアル番号: 0
有効期間の開始日: Mon Feb 27 13:00:00 JST 2023終了日: Mon Feb 05 12:59:59 JST 2024
証明書のフィンガプリント:
SHA1: 71:4B:28:D2:1E:5B:59:D2:97:B1:03:63:0F:69:FC:07:AA:EA:D4:07
SHA256: F5:D1:0F:70:68:AD:C6:91:51:9E:E7:46:25:FC:A2:BA:B5:9A:88:E2:5F:F2:8E:21:DD:C3:DC:D7:40:F2:DE:9B
署名アルゴリズム名: SHA256withRSA
サブジェクト公開鍵アルゴリズム: 2048ビットRSA鍵
バージョン: 3
拡張:
#1: ObjectId: 2.16.840.1.113730.1.13 Criticality=false
0000: 16 30 47 65 6E 65 72 61 74 65 64 20 62 79 20 74 .0Generated by t
0010: 68 65 20 53 65 63 75 72 69 74 79 20 53 65 72 76 he Security Serv
0020: 65 72 20 66 6F 72 20 7A 2F 4F 53 20 28 52 41 43 er for z/OS (RAC
0030: 46 29 F)
#2: ObjectId: 2.5.29.19 Criticality=true
BasicConstraints:[
CA:true
PathLen:2147483647
]
#3: ObjectId: 2.5.29.15 Criticality=true
KeyUsage [
DigitalSignature
Non_repudiation
Key_Encipherment
Data_Encipherment
Key_CertSign
Crl_Sign
]
#4: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 79 F8 5E E5 81 32 F4 1B 24 92 6D 60 86 BB 4A 33 y.^..2..$.m`..J3
0010: 16 2B EA 96 .+..
]
]
この証明書を信頼しますか。 [いいえ]: y
証明書がキーストアに追加されました
(5) DataStudio上での接続構成
1.データベースの作成
ストレージ・グループ、データベースを作成し、ユーザーに対してアクセス権を付与します。ここでは、ユーザーJENKIN1
をDb2接続ユーザーとして使用することを想定しています。
SQL実行例
CREATE STOGROUP DBBSTG VOLUMES ('*') VCAT DBD1 ;
CREATE DATABASE DBBZ001 STOGROUP DBBSTG BUFFERPOOL BP16K0 CCSID UNICODE;
COMMIT;
GRANT USE OF STOGROUP DBBSTG TO JENKIN1;
GRANT DBADM ON DATABASE DBBZ001 TO JENKIN1;
上のsQLでは、ストレージ・グループDBBSTG
、データベースDBBZ001
を作成し、JENKIN1
ユーザーに権限付与しています。
2.テーブルの作成
/usr/lpp/IBM/idz/usr/lpp/IBM/dbb/ddl/create_DB2z.sqlに提供されるサンプルを使用して、各種テーブル類を作成します。
create_DB2z.sql
/*******************************************************************************
* Licensed Materials - Property of IBM
* (c) Copyright IBM Corporation 2019, 2022. All Rights Reserved.
*
* Note to U.S. Government Users Restricted Rights:
* Use, duplication or disclosure restricted by GSA ADP Schedule
* Contract with IBM Corp.
*******************************************************************************/
--<ScriptOptions statementTerminator=";"/>
SET SCHEMA DBBZ;
CREATE TABLE LOGICAL_FILE (
C_ID BIGINT NOT NULL,
LF_FILE VARCHAR(1024) NOT NULL,
LF_LNAME CHARACTER(32) NOT NULL,
LANG_ID BIGINT,
LF_CICS CHAR(1) NOT NULL,
LF_SQL CHAR(1) NOT NULL,
LF_DLI CHAR(1) NOT NULL,
LF_MQ CHAR(1) NOT NULL
)
DATA CAPTURE NONE
IN DATABASE DBBZ001;
CREATE INDEX LF_FILE_NDX ON LOGICAL_FILE (LF_FILE ASC);
ALTER TABLE LOGICAL_FILE ADD CONSTRAINT LF_CID_NDX PRIMARY KEY (C_ID);
CREATE TABLE LOGICAL_DEPENDENCY (
C_ID BIGINT NOT NULL,
C_LNAME CHARACTER(32) NOT NULL,
CATEGORY_ID BIGINT,
LIBRARY_ID BIGINT
)
DATA CAPTURE NONE
IN DATABASE DBBZ001;
CREATE INDEX LD_C_LNAME_NDX ON LOGICAL_DEPENDENCY (C_LNAME ASC);
CREATE INDEX LD_ALL_NDX ON LOGICAL_DEPENDENCY (C_LNAME ASC, CATEGORY_ID ASC, LIBRARY_ID ASC);
ALTER TABLE LOGICAL_DEPENDENCY ADD CONSTRAINT LD_CID_NDX PRIMARY KEY (C_ID);
CREATE TABLE COLLECTION (
C_ID BIGINT NOT NULL,
C_CREATED TIMESTAMP NOT NULL WITH DEFAULT,
C_CREATED_BY CHARACTER(30),
C_LAST_UPDATED TIMESTAMP NOT NULL WITH DEFAULT,
C_LAST_UPDATED_BY CHARACTER(30),
C_NAME CHARACTER(128) NOT NULL,
PERMISSIONS_C_ID BIGINT
)
DATA CAPTURE NONE
IN DATABASE DBBZ001;
ALTER TABLE COLLECTION ADD CONSTRAINT COL_CID_NDX PRIMARY KEY (C_ID);
CREATE TABLE LF_LANGUAGES (
C_ID BIGINT NOT NULL,
C_LANGUAGE CHARACTER(32) NOT NULL
)
DATA CAPTURE NONE
IN DATABASE DBBZ001;
CREATE INDEX LANG_LANGUAGE_NDX ON LF_LANGUAGES (C_LANGUAGE ASC);
ALTER TABLE LF_LANGUAGES ADD CONSTRAINT LANG_CID_NDX PRIMARY KEY (C_ID);
CREATE TABLE LD_LIBRARIES (
C_ID BIGINT NOT NULL,
C_LIBRARY CHARACTER(44) NOT NULL
)
DATA CAPTURE NONE
IN DATABASE DBBZ001;
CREATE INDEX LIB_LIBRARY_NDX ON LD_LIBRARIES (C_LIBRARY ASC);
ALTER TABLE LD_LIBRARIES ADD CONSTRAINT LIB_CID_NDX PRIMARY KEY (C_ID);
CREATE TABLE LD_CATEGORIES (
C_ID BIGINT NOT NULL,
C_CATEGORY CHARACTER(32) NOT NULL
)
DATA CAPTURE NONE
IN DATABASE DBBZ001;
CREATE INDEX CAT_CATEGORY_NDX ON LD_CATEGORIES (C_CATEGORY ASC);
ALTER TABLE LD_CATEGORIES ADD CONSTRAINT CAT_CID_NDX PRIMARY KEY (C_ID);
CREATE TABLE DBB_TABLE_VERSIONS (
DBB_TBL_NAME VARCHAR(50) NOT NULL,
DBB_TBL_VERSION int
)
DATA CAPTURE NONE
IN DATABASE DBBZ001;
CREATE UNIQUE INDEX DBB_TBL_NAME_NDX ON DBB_TABLE_VERSIONS (DBB_TBL_NAME ASC);
ALTER TABLE DBB_TABLE_VERSIONS ADD CONSTRAINT DBB_TBL_NAME_NDX PRIMARY KEY (DBB_TBL_NAME);
CREATE TABLE BUILD_RESULT (
C_ID BIGINT NOT NULL,
C_CREATED TIMESTAMP NOT NULL WITH DEFAULT,
C_CREATED_BY CHARACTER(30),
BR_GROUP CHARACTER(128) NOT NULL,
BR_LABEL CHARACTER(128) NOT NULL,
BR_STATUS SMALLINT,
BR_STATE SMALLINT,
C_LAST_UPDATED TIMESTAMP NOT NULL WITH DEFAULT,
C_LAST_UPDATED_BY CHARACTER(30),
PERMISSIONS_C_ID BIGINT
)
DATA CAPTURE NONE
IN DATABASE DBBZ001;
CREATE INDEX BR_GROUP_NDX ON BUILD_RESULT (BR_GROUP ASC);
ALTER TABLE BUILD_RESULT ADD CONSTRAINT BR_CID_NDX PRIMARY KEY (C_ID);
CREATE TABLE BUILD_RESULT_PROPERTY (
C_ID BIGINT NOT NULL,
PROPERTY_NAME CHARACTER(128) NOT NULL,
PROPERTY_VALUE VARCHAR(1024) NOT NULL
)
DATA CAPTURE NONE
IN DATABASE DBBZ001;
CREATE INDEX PROPERTY_NAME_NDX ON BUILD_RESULT_PROPERTY (PROPERTY_NAME ASC);
CREATE INDEX PROPERTY_VALUE_NDX ON BUILD_RESULT_PROPERTY (PROPERTY_VALUE ASC);
ALTER TABLE BUILD_RESULT_PROPERTY ADD CONSTRAINT PROPERTY_CID_NDX PRIMARY KEY (C_ID);
CREATE TABLE ARTIFACT (
C_ID BIGINT NOT NULL,
A_CHECKSUM BIGINT,
A_TYPE VARCHAR(256) NOT NULL,
A_NAME CHARACTER(128) NOT NULL,
A_SIZE BIGINT
)
DATA CAPTURE NONE
IN DATABASE DBBZ001;
CREATE INDEX A_NAME_TYPE_NDX ON ARTIFACT (A_NAME ASC, A_TYPE ASC);
CREATE INDEX A_NAME_NDX ON ARTIFACT (A_NAME ASC);
ALTER TABLE ARTIFACT ADD CONSTRAINT A_CID_NDX PRIMARY KEY (C_ID);
CREATE TABLE ARTIFACT_CONTENT (
C_ID BIGINT NOT NULL,
CONTENT_DATA BLOB(100M)
)
DATA CAPTURE NONE
IN DATABASE DBBZ001;
ALTER TABLE ARTIFACT_CONTENT ADD CONSTRAINT CONTENT_CID_NDX PRIMARY KEY (C_ID);
CREATE TABLE PERMISSIONS (
C_ID BIGINT NOT NULL,
P_MANAGED_ID BIGINT NOT NULL,
P_OWNER CHARACTER(30) NOT NULL,
P_PERMISSION int,
P_TEAM CHARACTER(30)
)
DATA CAPTURE NONE
IN DATABASE DBBZ001;
ALTER TABLE PERMISSIONS ADD CONSTRAINT P_CID_NDX PRIMARY KEY (C_ID);
CREATE TABLE LF_DEP_MAPPING (
LF_ID BIGINT NOT NULL,
DEP_ID BIGINT NOT NULL
)
DATA CAPTURE NONE
IN DATABASE DBBZ001;
CREATE INDEX LF_DEP_MAP_LFID_NDX ON LF_DEP_MAPPING (LF_ID ASC);
CREATE INDEX LF_DEP_MAP_DEPID_NDX ON LF_DEP_MAPPING (DEP_ID ASC);
ALTER TABLE LF_DEP_MAPPING ADD CONSTRAINT LF_DEP_MAP_NDX PRIMARY KEY (LF_ID, DEP_ID);
CREATE TABLE COL_LF_MAPPING (
COLLECTION_ID BIGINT NOT NULL,
LF_ID BIGINT NOT NULL
)
DATA CAPTURE NONE
IN DATABASE DBBZ001;
CREATE INDEX COL_LF_MAP_COLID_NDX ON COL_LF_MAPPING (COLLECTION_ID ASC);
CREATE INDEX COL_LF_MAP_LFID_NDX ON COL_LF_MAPPING (LF_ID ASC);
ALTER TABLE COL_LF_MAPPING ADD CONSTRAINT COL_LF_MAP_NDX PRIMARY KEY (COLLECTION_ID, LF_ID);
CREATE TABLE BR_REPORT_MAPPING (
BR_ID BIGINT NOT NULL,
REP_ID BIGINT NOT NULL
)
DATA CAPTURE NONE
IN DATABASE DBBZ001;
CREATE INDEX BR_REP_MAP_BRID_NDX ON BR_REPORT_MAPPING (BR_ID ASC);
CREATE INDEX BR_REP_MAP_REPID_NDX ON BR_REPORT_MAPPING (REP_ID ASC);
ALTER TABLE BR_REPORT_MAPPING ADD CONSTRAINT BR_REP_MAP_NDX PRIMARY KEY (BR_ID, REP_ID);
CREATE TABLE BR_REPORT_DATA_MAPPING (
BR_ID BIGINT NOT NULL,
REP_D_ID BIGINT NOT NULL
)
DATA CAPTURE NONE
IN DATABASE DBBZ001;
CREATE INDEX BR_REP_D_MAP_BRID_NDX ON BR_REPORT_DATA_MAPPING (BR_ID ASC);
CREATE INDEX BR_REP_D_MAP_REPDID_NDX ON BR_REPORT_DATA_MAPPING (REP_D_ID ASC);
ALTER TABLE BR_REPORT_DATA_MAPPING ADD CONSTRAINT BR_REP_D_MAP_NDX PRIMARY KEY (BR_ID, REP_D_ID);
CREATE TABLE BR_ATTACHMENT_MAPPING (
BR_ID BIGINT NOT NULL,
ATTACHMENT_ID BIGINT NOT NULL
)
DATA CAPTURE NONE
IN DATABASE DBBZ001;
CREATE INDEX BR_ATTACHMENT_MAP_BRID_NDX ON BR_ATTACHMENT_MAPPING (BR_ID ASC);
CREATE INDEX BR_ATTACHMENT_MAP_ATTACHMENTID_NDX ON BR_ATTACHMENT_MAPPING (ATTACHMENT_ID ASC);
ALTER TABLE BR_ATTACHMENT_MAPPING ADD CONSTRAINT BR_ATTACHMENT_MAP_NDX PRIMARY KEY (BR_ID, ATTACHMENT_ID);
CREATE TABLE BR_PROP_MAPPING (
BR_ID BIGINT NOT NULL,
PROP_ID BIGINT NOT NULL
)
DATA CAPTURE NONE
IN DATABASE DBBZ001;
CREATE INDEX BR_PROP_MAP_BRID_NDX ON BR_PROP_MAPPING (BR_ID ASC);
CREATE INDEX BR_PROP_MAP_PROPID_NDX ON BR_PROP_MAPPING (PROP_ID ASC);
ALTER TABLE BR_PROP_MAPPING ADD CONSTRAINT BR_PROP_MAP_NDX PRIMARY KEY (BR_ID, PROP_ID);
CREATE TABLE A_CONTENT_MAPPING (
A_ID BIGINT NOT NULL,
CONTENT_ID BIGINT NOT NULL
)
DATA CAPTURE NONE
IN DATABASE DBBZ001;
CREATE INDEX A_CONTENT_MAP_AID_NDX ON A_CONTENT_MAPPING (A_ID ASC);
CREATE INDEX A_CONTENT_MAP_CONTENTID_NDX ON A_CONTENT_MAPPING (CONTENT_ID ASC);
ALTER TABLE A_CONTENT_MAPPING ADD CONSTRAINT A_CONTENT_MAP_NDX PRIMARY KEY (A_ID, CONTENT_ID);
ALTER TABLE COLLECTION ADD CONSTRAINT UNQ_COLLECTION_0 UNIQUE (C_NAME);
ALTER TABLE BUILD_RESULT ADD CONSTRAINT UNQ_BUILD_RESULT_0 UNIQUE (BR_GROUP, BR_LABEL);
ALTER TABLE PERMISSIONS ADD CONSTRAINT UNQ_PERMISSIONS_0 UNIQUE (P_MANAGED_ID);
ALTER TABLE COLLECTION ADD CONSTRAINT CLLCTONPRMSSONSCID FOREIGN KEY (PERMISSIONS_C_ID) REFERENCES PERMISSIONS (C_ID);
ALTER TABLE BUILD_RESULT ADD CONSTRAINT BLDRSLTPRMSSONSCID FOREIGN KEY (PERMISSIONS_C_ID) REFERENCES PERMISSIONS (C_ID);
ALTER TABLE LOGICAL_FILE ADD CONSTRAINT LOGICALFILELANG_ID FOREIGN KEY (LANG_ID) REFERENCES LF_LANGUAGES (C_ID);
ALTER TABLE LOGICAL_DEPENDENCY ADD CONSTRAINT LGCLDPNDENCYLBRRYD FOREIGN KEY (LIBRARY_ID) REFERENCES LD_LIBRARIES (C_ID);
ALTER TABLE LOGICAL_DEPENDENCY ADD CONSTRAINT LGCLDPNDENCYCTGRYD FOREIGN KEY (CATEGORY_ID) REFERENCES LD_CATEGORIES (C_ID);
ALTER TABLE LF_DEP_MAPPING ADD CONSTRAINT LFDEPMAPPINGDEP_ID FOREIGN KEY (DEP_ID) REFERENCES LOGICAL_DEPENDENCY (C_ID);
ALTER TABLE LF_DEP_MAPPING ADD CONSTRAINT LFDEP_MAPPINGLF_ID FOREIGN KEY (LF_ID) REFERENCES LOGICAL_FILE (C_ID);
ALTER TABLE COL_LF_MAPPING ADD CONSTRAINT CLLFMPPINGCLLCTNID FOREIGN KEY (COLLECTION_ID) REFERENCES COLLECTION (C_ID);
ALTER TABLE COL_LF_MAPPING ADD CONSTRAINT COLLF_MAPPINGLF_ID FOREIGN KEY (LF_ID) REFERENCES LOGICAL_FILE (C_ID);
ALTER TABLE BR_REPORT_MAPPING ADD CONSTRAINT BRRPORTMAPPINGRPID FOREIGN KEY (REP_ID) REFERENCES ARTIFACT (C_ID);
ALTER TABLE BR_REPORT_MAPPING ADD CONSTRAINT BRREPORTMAPPINGBRD FOREIGN KEY (BR_ID) REFERENCES BUILD_RESULT (C_ID);
ALTER TABLE BR_REPORT_DATA_MAPPING ADD CONSTRAINT BRRPRTDTMPPINGRPDD FOREIGN KEY (REP_D_ID) REFERENCES ARTIFACT (C_ID);
ALTER TABLE BR_REPORT_DATA_MAPPING ADD CONSTRAINT BRRPRTDTMAPPINGBRD FOREIGN KEY (BR_ID) REFERENCES BUILD_RESULT (C_ID);
ALTER TABLE BR_ATTACHMENT_MAPPING ADD CONSTRAINT BRATTACHMENTMAPPINGATTACHMENT_ID FOREIGN KEY (ATTACHMENT_ID) REFERENCES ARTIFACT (C_ID);
ALTER TABLE BR_ATTACHMENT_MAPPING ADD CONSTRAINT BRATTACHMENT_MAPPINGBR_ID FOREIGN KEY (BR_ID) REFERENCES BUILD_RESULT (C_ID);
ALTER TABLE BR_PROP_MAPPING ADD CONSTRAINT BRPROPMAPPINGPRPID FOREIGN KEY (PROP_ID) REFERENCES BUILD_RESULT_PROPERTY (C_ID);
ALTER TABLE BR_PROP_MAPPING ADD CONSTRAINT BRPROPMAPPINGBR_ID FOREIGN KEY (BR_ID) REFERENCES BUILD_RESULT (C_ID);
ALTER TABLE A_CONTENT_MAPPING ADD CONSTRAINT CNTNTMAPPINGCNTNTD FOREIGN KEY (CONTENT_ID) REFERENCES ARTIFACT_CONTENT (C_ID);
ALTER TABLE A_CONTENT_MAPPING ADD CONSTRAINT ACONTENTMAPPINGAID FOREIGN KEY (A_ID) REFERENCES ARTIFACT (C_ID);
CREATE TABLE DBB_SEQ_TABLE (
DBB_SEQ_NAME VARCHAR(50) NOT NULL,
DBB_SEQ_VALUE DECIMAL(15),
PRIMARY KEY (DBB_SEQ_NAME)
)
DATA CAPTURE NONE
IN DATABASE DBBZ001;
INSERT INTO DBB_SEQ_TABLE(DBB_SEQ_NAME, DBB_SEQ_VALUE) values ('DBB_ID_SEQ', 0);
INSERT INTO DBB_TABLE_VERSIONS(DBB_TBL_NAME, DBB_TBL_VERSION) VALUES ('COLLECTION', 2);
INSERT INTO DBB_TABLE_VERSIONS(DBB_TBL_NAME, DBB_TBL_VERSION) VALUES ('LOGICAL_FILE', 2);
INSERT INTO DBB_TABLE_VERSIONS(DBB_TBL_NAME, DBB_TBL_VERSION) VALUES ('LOGICAL_DEPENDENCY', 1);
INSERT INTO DBB_TABLE_VERSIONS(DBB_TBL_NAME, DBB_TBL_VERSION) VALUES ('ARTIFACT', 2);
INSERT INTO DBB_TABLE_VERSIONS(DBB_TBL_NAME, DBB_TBL_VERSION) VALUES ('BUILD_RESULT', 2);
INSERT INTO DBB_TABLE_VERSIONS(DBB_TBL_NAME, DBB_TBL_VERSION) VALUES ('PERMISSIONS', 2);
上で作成されたテーブルに対して、特定のユーザーのアクセス権を付与します。/usr/lpp/IBM/idz/usr/lpp/IBM/dbb/ddl/grant_DB2z.sqlにサンプルが提供されています。
grant_DB2z.sql
/*******************************************************************************
* Licensed Materials - Property of IBM
* (c) Copyright IBM Corporation 2022. All Rights Reserved.
*
* Note to U.S. Government Users Restricted Rights:
* Use, duplication or disclosure restricted by GSA ADP Schedule
* Contract with IBM Corp.
*******************************************************************************/
--<ScriptOptions statementTerminator=";"/>
SET SCHEMA DBBZ;
GRANT DELETE, INSERT, SELECT, UPDATE
ON TABLE
A_CONTENT_MAPPING,
ARTIFACT,
ARTIFACT_CONTENT,
BR_ATTACHMENT_MAPPING,
BR_PROP_MAPPING,
BR_REPORT_DATA_MAPPING,
BR_REPORT_MAPPING,
BUILD_RESULT,
BUILD_RESULT_PROPERTY,
COL_LF_MAPPING,
COLLECTION,
DBB_SEQ_TABLE,
DBB_TABLE_VERSIONS,
LD_CATEGORIES,
LD_LIBRARIES,
LF_DEP_MAPPING,
LF_LANGUAGES,
LOGICAL_DEPENDENCY,
LOGICAL_FILE,
PERMISSIONS
TO JENKIN1;
COMMIT ;
※この襟では、ユーザーJENKIN1
に対して権限を付与しています。
3.JDBC Driverの確認
ここでは、JDBC Type4 Driverを使用する想定なので、Type4 Driverのjarのパスを確認しておきます。
TAGUCHI : /u/TAGUCHI : > ls -la /usr/lpp/db2d10/jdbc/classes/
total 27040
drwxr-xr-x 3 BPXROOT 2611 8192 Dec 27 15:54 .
drwxr-xr-x 7 BPXROOT 2611 8192 Jun 14 2022 ..
drwxr-xr-x 2 BPXROOT 2611 8192 Jun 14 2022 IBM
-rwxr-xr-x 2 BPXROOT 2611 3814648 Jun 14 2022 db2jcc.jar
-rwxr-xr-x 2 BPXROOT 2611 6634906 Dec 27 15:54 db2jcc4.jar
-rwxr-xr-x 2 BPXROOT 2611 23709 Jun 14 2022 db2jcc_javax.jar
-rwxr-xr-x 2 BPXROOT 2611 2755 Jun 14 2022 db2jcc_license_cisuz.jar
-rwxr-xr-x 2 BPXROOT 2611 1629165 Jun 14 2022 sqlj.zip
-rwxr-xr-x 2 BPXROOT 2611 1668961 Dec 27 15:54 sqlj4.zip
db2jcc4.jar
および db2jcc_license_cisuz.jar
が /usr/lpp/db2d10/jdbc/classes/
以下にあることを確認します。
4.TLS通信用のトラスト・ストア作成
TLS通信に使用するCA証明書を入手します。ここではcommon_cacert
とします。このCA証明書を取り込んだトラスト・ストアをkeytoolコマンドで作成します。
keytoolコマンド実行例
※途中パスワードを聞かれるのでパスワードを指定します。
JENKIN1 : /u/JENKIN1/DBB : > cat create_trustStore.sh
#!/bin/sh
keytool -import -file common_cacert -alias waziCA -keystore waziTrustStore_JENKIN1.jks
JENKIN1 : /u/JENKIN1/DBB : > ./create_trustStore.sh
Enter keystore password:
Re-enter new password:
Owner: CN=STOCK_SELF_SIGNED_CERT, OU=ZOSVSI, O=International Business Machines, C=US
Issuer: CN=STOCK_SELF_SIGNED_CERT, OU=ZOSVSI, O=International Business Machines, C=US
Serial number: 0
Valid from: 2/27/23 1:00 PM until: 2/5/24 12:59 PM
Certificate fingerprints:
MD5: 38:0A:AE:A3:E7:00:BB:E5:13:CA:E8:E6:91:58:EA:49
SHA1: 71:4B:28:D2:1E:5B:59:D2:97:B1:03:63:0F:69:FC:07:AA:EA:D4:07
SHA256: F5:D1:0F:70:68:AD:C6:91:51:9E:E7:46:25:FC:A2:BA:B5:9A:88:E2:5F:F2:8E:21:DD:C3:DC:D7:40:F2:DE:9B
Signature algorithm name: SHA256withRSA
Version: 3
Extensions:
#1: ObjectId: 2.16.840.1.113730.1.13 Criticality=false
瑞瑞噫走盗楳抹銘抹桝楳抹又逗摩凰逗楳仙チ>チハ/ネチタツ`ネ諮髄椙迄抹逗蕪抹俣斧侭楳凰逗蕪抹摩ヌチ・トヘハムネ`・ハホ諮瑞噫抹逗末姪逗/テ氾蕪逗・斧泊箔チハテ?ハ:|・ 芬瑞盗噫薄凰緕
#2: ObjectId: 2.5.29.15 Criticality=true
KeyUsage [
DigitalSignature
Non_repudiation
Key_Encipherment
Data_Encipherment
Key_CertSign
Crl_Sign
]
#3: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 79 f8 5e e5 81 32 f4 1b 24 92 6d 60 86 bb 4a 33 y....2....m...J3
0010: 16 2b ea 96 ....
]
]
#4: ObjectId: 2.5.29.19 Criticality=true
BasicConstraints:[
CA:true
PathLen:2147483647
]
Trust this certificate? [no]: y
Certificate was added to keystore
89 directories, 53 files
5.環境変数設定
...
export DBB_HOME=/usr/lpp/IBM/dbb
export DBB_CONF=/etc/dbb
...
dbbenv.shにて、JDBC DriverのjarをCLASSPATHに指定します。
#! /bin/sh
#
# Licensed materials - Property of IBM
# 5655-AC5 Copyright IBM Corp. 2018, 2022
# All rights reserved
# US Government users restricted rights - Use, duplication or
# disclosure restricted by GSA ADP schedule contract with IBM Corp.
#
###############################################################################################
## Sample shell script to set DBB Environment Variables
##
##
## Setup Instructions:
## 1) Replace default values (if they differ) with your system values.
## 2) Execute the script using ./dbbenv.sh
##
###############################################################################################
# DBB required variables
export DBB_HOME=/usr/lpp/IBM/dbb
export DBB_CONF=/etc/dbb
# Add Db2 JDBC Driver Jar Files to CLASSPATH
#export CLASSPATH=/usr/lpp/db2c10/jdbc/classes/db2jcc4.jar:/usr/lpp/db2c10/jdbc/classes/db2jcc_license_cisuz.jar:$CLASSPATH
export CLASSPATH=/usr/lpp/db2d10/jdbc/classes/db2jcc4.jar:/usr/lpp/db2d10/jdbc/classes/db2jcc_license_cisuz.jar:$CLASSPATH
# Db2 Data Server Driver variables required for Type 2 local connections
#export STEPLIB=DSNC10.SDSNEXIT:DSNC10.SDSNLOAD:DSNC10.SDSNLOD2:$STEPLIB
#export LIBPATH=/usr/lpp/db2c10/jdbc/lib:$LIBPATH
export STEPLIB=DB2.V13R1M0.SDSNEXIT:DB2.V13R1M0.SDSNLOAD:DB2.V13R1M0.SDSNLOD2:$STEPLIB
export LIBPATH=/usr/lpp/db2d10/jdbc/lib:$LIBPATH
db2connectino.confファイルにて、JDBC Typ4での接続用URLと、Db2スキーマを設定します。
###############################################################################
# Licensed Materials - Property of IBM
# (c) Copyright IBM Corporation 2022. All Rights Reserved.
#
# Note to U.S. Government Users Restricted Rights:
# Use, duplication or disclosure restricted by GSA ADP Schedule
# Contract with IBM Corp.
###############################################################################
# Db2 server location. Local or remote URL.
#url=jdbc:db2:DBB1
#url=jdbc:db2://system1.company.com:5040/DBB1
url=jdbc:db2://localhost:8102/DBD1LOC:sslConnection=true;sslTrustStoreType=jks;sslTrustStoreLocation=/u/JENKIN1/DBB/waziTrustStore_JENKIN1.jks;sslTrustStorePassword=xxx;
# DBB Db2 Schema. Default is DBBZ.
currentSchema=DBBZ
# Db2 Connection Security Mechanism Configuration
# For more details search 'securityMechanism' and 'encryptionAlgorithm' at
# https://www.ibm.com/docs/en/db2-for-zos/11?topic=information-data-server-driver-jdbc-sqlj-configuration-properties
# Specified DRDA security mechanism. Clear text user ID and password = 3.
securityMechanism=3
# Request AES security
#encryptionAlgorithm=2
6.RACF定義追加
Db2関連
Db2接続ユーザーとしてJENKIN1
を使用することを想定していますので、以下のTSOコマンドで権限を付与しておきます。
PERMIT DBD1.* CLASS(DSNR) ID(JENKIN1) ACCESS(READ)
SETROPTS RACLIST(DSNR) REFRESH
DBB関連
参考: Setting metadata store access permissions
以下のTSOコマンドで3つのグループを作成します。
ADDGROUP DBBADMNS OMVS(GID(1001))
ADDGROUP DBBUSERS OMVS(GID(1002))
ADDGROUP DBBGUEST OMVS(GID(1003))
以下のTSOコマンドで、ビルド実行ユーザーTAGUCHI
をDBBADMNS
グループにCONNECTします。
CONNECT TAGUCHI GROUP(DBBADMNS)
7.Db2接続ユーザーのパスワード・ファイル作成
参考: Metadata store - Creating an IBM Db2 metadata store connection
Db2への接続する際に使用するパスワード情報を、暗号化したファイルとして生成するユーティリティー(pwf.sh)が提供されています。それを使用して、Db2接続ユーザー(ここではJENKIN1
を想定)のパスワードを、暗号化したファイルとして作成しておきます。
JENKIN1 : /u/JENKIN1/DBB : > $DBB_HOME/bin/pwf.sh pass.txt
Enter password:
JENKIN1 : /u/JENKIN1/DBB : > ls -la
total 48
drwxr-xr-x 2 JENKIN1 SYS1 8192 May 9 16:49 .
drwxr-xr-x 10 JENKIN1 SYS1 8192 May 9 16:48 ..
-rw------- 1 JENKIN1 SYS1 244 May 9 16:49 pass.txt
JENKIN1 : /u/JENKIN1/DBB : > cat pass.txt
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>1.0</comment>
<entry key="version">2</entry>
<entry key="password">l2IXUwWVuhAHur02HYvubQ==</entry>
zAppBuildでの使用例
build-conf/build.properties
Metadata Storeの種類の選択は、build-conf/build.propertiesのプロパティーで指定します。Metadata Storeとしてdb2を使用する場合は、以下のプロパティーを指定します。
- metadataStoreType=db2: Metadata StoreとしてUSSファイルを使用することを宣言しています。
- metadataStoreDb2ConnectionConf=/etc/dbb/db2Connection.conf: Db2への接続情報を設定している構成ファイルを指定します。
ビルド・コマンドのオプション指定
Db2接続に使用するユーザーID/パスワード情報はビルド実行時のオプションで指定します。
参考: Building Applications with zAppBuild - Command Line Options Summary
- --id: Db2接続ユーザー
- --pwFile: パスワード・ファイル
ビルド・コマンド実行のスクリプト例
#!/bin/sh
. /etc/dbb/dbbenv.sh
/usr/lpp/IBM/dbb/bin/groovyz /u/TAGUCHI/DBB/dbb-zappbuild/build.groovy --logEncoding UTF-8 --workspace /u/TAGUCHI/DBB --application ISEConf2023_MySampleDBB01 --hlq TAGUCHI.DBB --outDir /u/TAGUCHI/DBB/logs --verbose --fullBuild --id JENKIN1 --pwFile /u/JENKIN1/DBB/pass.txt