LoginSignup
1
0

DBB/zAppBuildについてのメモ - (4)Metadata Store構成

Last updated at Posted at 2023-06-04

はじめに

ここでは、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ディレクトリ/ファイル構造例
.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
`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上での接続構成

image.png

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.環境変数設定

/etc/profile抜粋
...
export DBB_HOME=/usr/lpp/IBM/dbb
export DBB_CONF=/etc/dbb
...

dbbenv.shにて、JDBC DriverのjarをCLASSPATHに指定します。

/etc/dbb/dbbenv.sh
#! /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スキーマを設定します。

/etc/dbb/db2Connection.conf
###############################################################################
# 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コマンドで、ビルド実行ユーザーTAGUCHIDBBADMNSグループに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
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