自动化部署 Rational Team Concert 生产环境

717 阅读30分钟
原文链接: www.ibm.com

自动化部署 Rational Team Concert 生产环境

笔者在前文《Rational Team Concert V6.0 定制安装与配置》中对RTC生产环境部署进行了详细的讲解,使读者能够掌握如何在Windows环境下,手动部署基于WAS和DB2且集成AD的RTC生产环境的全过程,并理解RTC和Jazz平台生产环境的部署架构。但从生产环境运维的角度来看,对于持续交付新功能,备份和恢复环境,迁移数据等常见工作,RTC运维人员靠手动安装和配置,不可能做到快速部署和恢复RTC生产环境,原因包括:

  • 不熟悉生产环境所在的硬件或操作系统(如AIX或Power Linux),导致RTC运维人员要花费很多时间学习和掌握相关的操作,即便软硬件环境有虚拟化功能,支持备份某个时间点上操作系统一级的镜像
  • 企业组织架构庞大,对于硬件资源的维护和使用可能跨部门,导致RTC运维人员可能只拥有部分权限,很难自由灵活的对软硬件资源进行定制
  • 部署的步骤和环境状态记录不全,如果RTC运维人员一旦变动,会丧失对原有生产环境的掌控

因此,只有通过半自动化或全自动化部署完整的生产环境,用源代码配置管理的方式管理部署步骤和配置文件,有计划并高频率的重复环境部署或恢复过程,才能更好的保证RTC生产环境运行的延续性,满足灾备恢复和高可用,保证某一时间点进行的部署可重复、可回退。

另外,在云计算时代,越来越多的企业选择公有云或私有云来获取软硬件资源,利用云环境弹性扩展的属性,按照动态需求来部署用于企业生产活动的应用环境。因此,无论对原有的RTC生产环境迁移到云端,还是支持RTC生产环境在云端的弹性扩展,对于自动化部署都有迫切需求,且更加关注部署自身的步骤和过程。

背景和部署场景

IBM虽然通过UrbanCode Deploy和PureApp提供支持CLM(包括RTC)自动化部署的模块,但都依赖于特定软硬件场景和工具。而本文作为前文的姊妹篇,通过讲解RTC自动化部署的机制和获取必要的配置模板文件,向读者展示如何用脚本的方式自动化部署简单的RTC演示环境,和相对复杂且基于WAS和DB2,并集成openLDAP和IHS反向代理服务的RTC生产环境(如表1)。

部署场景比较

场景比较 RTC演示环境 RTC生产环境
操作系统 RHEL 6.8 Power Linux RHEL 6.8
安装包源 jazz.net Passport Advantage Online
安装包 在线安装:
CLM-Web-Installer-Linux-6.0.4.zip
离线安装:
agent.installer.linux.gtk.x86_64_1.8.5001.*.zip
JTS-CCM-QM-RM-JRS-RELM-repo-6.0.4.zip
RCLM_SERVER_INSTALL_V_6.0.4_MP_ML.zip
DB2_10.5.0.3_limited_Lnx_x86-64.tar.gz
WAS_V8.5.5_*_OF_3.zip
WAS_V8.5.5_SUPPL_*_OF_3.zip
安装模式 自行安装IBMIM后,继续安装其他 CLM自带IBMIM并安装
Jazz注册 (注) 快速(Express) 定制(Custom)
应用服务器 Liberty(自带) WAS 8.5.5
数据库 Derby(自带) DB2 v10.5
反向代理 IHS 8.5.5
LDAP OpenLDAP
挂载License 挂载Trial License 部署过程中不挂载

注:体现在安装过程中的是否安装Tomcat或Liberty应用服务器,并且在注册应用环节选择Custom或Express。

本文因为篇幅有限,对部署策略不做讨论,只着重介绍RTC部署自动化实现过程,其中:

第一部分,通过对自动化部署通用步骤和方法的介绍,获取用于RTC自动化部署的脚本

第二部分,通过在线或离线方式,结合自动化脚本,快速获取RTC演示环境(自带数据库和中间件)

第三部分,通过自动化配置DB2、openLDAP、IHS反向代理,快速获取完整的RTC生产环境(基于DB2和WAS)

第四部分,简单介绍云环境下的RTC部署

RTC自动化部署通用步骤和方法

步骤1. 确认初始环境

步骤2. 配置初始环境

步骤3. 获取软件安装包

步骤4. 安装和使用IBMIM

步骤5. 安装和配置DB2

步骤6. 安装和配置WAS

步骤7. 安装CLM

步骤8. Jazz平台注册应用

步骤9. 验证RTC应用可用

步骤1. 获取初始环境

在传统企业场景中,用于生产的环境通常是性能可靠的虚拟机或实体机,干净的操作系统可能是IT部门直接交付的,也可能是我们基于虚拟化工具自行搭建的。如果需要自行搭建,那么自动化部署就要从获得一个满足安装前置条件的、干净的操作系统开始,包括需要事先安装好各种繁杂的依赖包,需要事前设置操作系统级的参数等。

从实现方式上看,我们可以基于VMWare,Xen,KVM等虚拟化软件,准备满足这些需求的初始环境(虚拟机)模板或快照用于反复使用;也可以基于操作系统提供的快速安装工具(如Linux的KickStart)和对应的配置文件,更灵活且动态的获取一个环境。

在云端场景中,无论OpenStack还是AWS,都能快速提供通用或定制的初始环境。新近更有Docker容器技术,通过编排部署过程来管理和调用环境,以满足DevOps需求。因篇幅所限,本文的自动化部署默认从已得到一个初始环境开始。

步骤2. 配置初始环境

对于安装RTC前的前置条件,除了对CPU,内存,硬盘空间的最小要求以外,还需要在操作系统中重新设置参数。例如,修改limits.conf配置文件,我们通常要做文件备份、打开文件、修改文件、保存文件等多个步骤的操作。但通过命令行和脚本,可以按照下面方法一次性执行完所有用于重新设置的动作。

cp /etc/security/limits.conf /etc/security/limits.conf.bk
cat > /etc/security/limits.conf <<EOF
* hard nofile 655360
* soft nofile 655360
* hard nproc 10000
* soft nproc 10000
EOF

对于更多RTC安装的前置条件,可以参考官方文档

步骤3. 获取软件安装包

安装RTC有多种类型的安装包可选。从产品模块划分:有只包括RTC的,也有提供CLM所有产品模块的安装包;从安装方式上划分:有在线安装包和离线安装包;从安装前置条件划分:有自动安装IBMIM的,也有不带IBMIM只提供Repo库的安装包;从安装包来源划分:有从jazz.net上下载的按平台分的安装包,也有从Passport Advantage Online上下载的支持所有平台的安装包。

用于自动化部署的安装文件从哪里来?是用网上的?还是本地的?是用单平台的?还是支持多平台的?解答这些问题需要依赖自动化部署场景的需求。文件源的选择、安装文件的大小、网络的速度都影响着自动化部署效率。本文为在自动化部署RTC演示环境的场景中,选择在线安装、通过IBMIM访问jazz.net上在线repo库,快速安装基于Liberty和Derby的RTC演示环境。在自动化部署RTC生产环境的场景中,选择离线安装、使用自带IBMIM的CLM安装包后,继续安装WAS,IHS等RTC生产环境必须的部件。

步骤4. 安装和使用IBMIM

IBMIM(IBM Installation Manager)是IBM软件安装管理工具,使用IBMIM录制图形化引导的步骤,获取自动化安装模板;通过修改和定制软件包提供的、或提前录制好的安装模板,使用IBMIM回放并完成静默安装(如清单1)

清单 1. 安装IBMIM、录制并回放安装过程
#解压缩IBMIM
unzip agent.installer.linux.gtk.x86_64_1.8.5001.20161016_1705.zip -d /install/jazz.net/im
 
#静默安装IBMIM
/install/jazz.net/im/tools/imcl install com.ibm.cic.agent -repositories /install/jazz.net/im/repository.config -installationDirectory /opt/IBM/InstallationManager/eclipse -acceptLicense -showProgress
 
# IBMIM录制安装模板
/opt/IBM/InstallationManager/eclipse/IBMIM -record response.xml -skipInstall /tm
 
# IBMIM回放安装模板进行静默安装
/opt/IBM/InstallationManager/eclipse/tools/imcl -acceptLicense -showProgress input response.xml
 
# IBMIM检查其管理的安装结果
/opt/IBM/InstallationManager/eclipse/tools/imcl listInstalledPackages
/opt/IBM/InstallationManager/eclipse/tools/imcl listInstallationDirectories

步骤5. 安装和配置DB2

安装DB2需要提前录制DB2的response文件(db2server.rsp)。可以通过一次界面交互式安装获得,以后反复使用(如清单2)。在安装过程中,创建用户db2inst1, db2fenc1, dasadm1,DB2文件默认安装到/opt/ibm/db2和/home/db2inst1下。

清单 2. 静默安装DB2的response文件db2server.rsp
*-----------------------------------------------------
* Generated response file used by the DB2 Setup wizard
* generation time: 5/11/16 11:13 AM
*-----------------------------------------------------
*  Product Installation
LIC_AGREEMENT       = ACCEPT
PROD       = DB2_SERVER_EDITION
FILE       = /opt/ibm/db2/V10.5
INSTALL_TYPE       = CUSTOM
COMP       = TSAMP
COMP       = GUARDIUM_INST_MNGR_CLIENT
COMP       = DB2_UPDATE_SERVICE
COMP       = COMMUNICATION_SUPPORT_TCPIP
COMP       = JDK
COMP       = JAVA_SUPPORT
COMP       = FIRST_STEPS
COMP       = BASE_DB2_ENGINE
COMP       = REPL_CLIENT
COMP       = LDAP_EXPLOITATION
COMP       = INSTANCE_SETUP_SUPPORT
COMP       = DB2_SAMPLE_DATABASE
COMP       = ACS
COMP       = SQL_PROCEDURES
COMP       = DB2_DATA_SOURCE_SUPPORT
COMP       = BASE_CLIENT
COMP       = CONNECT_SUPPORT
*-----------------------------------------------
*  Das properties
*-----------------------------------------------
DAS_CONTACT_LIST       = LOCAL
*  DAS user
DAS_USERNAME       = dasusr1
DAS_GROUP_NAME       = dasadm1
DAS_HOME_DIRECTORY       = /home/dasusr1
.....

在DB2安装完成后,需要按照CLM安装需求配置DB2,使用db2inst1用户执行DB2命令,并通过脚本创建DB2数据库(如清单3)。

清单 3. 配置和创建DB2数据库
#/bin/bash
db2stop force
db2start
 
#按照CLM安装需求配置DB2
db2set DB2_EVALUNCOMMITTED=ON
db2set DB2_SKIPDELETED=ON
db2set DB2_SKIPINSERTED=ON
db2set DB2COMM=TCPIP
 
#重新启动配置生效
db2stop force
db2start
 
#创建DB2数据库
db2 "CREATE DATABASE jts ON /db2fs DBPATH ON /db2path USING CODESET UTF-8 TERRITORY US PAGESIZE 16 K AUTOCONFIGURE USING MEM_PERCENT 20 APPLY DB ONLY"
db2 "UPDATE DB CFG FOR jts USING LOGFILSIZ 20480 LOGPRIMARY 30 LOGSECOND 4"
db2 "CONNECT TO jts"
db2 "CREATE SCHEMA jts"
db2 "CONNECT RESET"
......

步骤6. 安装和配置WAS

在配置WAS和IHS环节,WAS提供AdminTask等接口来定义WAS上的各种属性,使用WAS自带的基于jython的wsadmin命令,配合包括AdminTask等接口命令的配置模板文件, 进行基于命令行的自动化配置。例如下面执行wsadmin的完整命令,包括WAS用户名和密码、配置模板文件template.py等参数。

/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/bin/wsadmin.sh \
    -language jython \
    -user admin \
    -password admin \
    -f template.py

配置模板文件通过编辑自定义或在WAS的Web控制台录制。如果对AdminTask不熟悉的话,可以在WAS的Web控制台上进行手工配置操作,点击"保存"后,界面右侧出现命令助手(Command Assistance),通过点击来获取刚才操作对应的配置变更(AdminTask命令),用于编辑配置模板文件(如图1)。

通过WAS的web控制台录制配置变更动作,获取AdminTask命令

点击查看大图

步骤7. 安装CLM

在WAS和IHS配置、集成和应用部署完成后,基于JTS(Jazz平台)应用,对CCM(RTC)、qm(RQM)等其他应用的进一步配置,包括绑定数据库、注册应用、定义用户来源、赋予license等。启动JTS、CCM等应用后,手动注册操作通常在Web界面上进行,CLM也提供repotools-jts命令,允许在命令行环境下按照提示一步一步的录制配置过程,然后配合特定参数执行回放,完成自动化配置(如清单4)。其中response.txt是回放配置文件,https:/ clm.oa.demo.com:9443/jts是Jazz平台的URI。

清单 4. 录制和回放repotools-jts的response文件
# 进入CLM的安装目录
cd /opt/IBM/JazzTeamServer/server
 
# repotools-jts录制配置过程
./repotools-jts.sh  -setup repositoryURL=https://clm.oa.demo.com:9443/jts adminUserId=jazzldapadmin adminPassword=jazzldapadmin_password logFile=trace.log responseFile=response.txt
 
# repotools-jts回放配置过程
./repotools-jts.sh  -setup repositoryURL=https://clm.oa.demo.com:9443/jts adminUserId=jazzldapadmin adminPassword=jazzldapadmin_password logFile=trace.log parametersFile=response.txt

步骤8. Jazz平台注册应用

录制得到配置模板response文件后,基于固定格式和参数名称进行再编辑,比如灵活的指定数据库、LDAP、邮件等属性,可以提高自动化脚本的灵活度。例如:在录制过程中,只设置了必填得URI、数据库和应用注册信息,没有设置LDAP、email和License信息。在编辑过程中,从相应环境上获取这些信息,补充缺失参数后得到一个完整的、基于Derby数据库、用于快速Jazz注册的response文件(如清单5)。

清单 5. 用于快速Jazz注册的response文件(基于Derby数据库)

步骤9. 验证RTC应用可用

安装部署全部完成后,我们通常使用web浏览器或RTC客户端访问RTC(https://clm.oa.demo.com/ccm),输入用户名和密码通过验证之后,才能访问所在项目区域(Project Area)并作操作。如果要在部署后自动化验证这些环节,除了使用netstat命令在服务器端侦听应用所在进程端口9443外,还可以使用curl通过命令行方式模拟Web浏览器行为(如清单6)。

清单 6. 使用curl模拟Web浏览器操作行为
# 模拟浏览器进行用户操作的参数
jazzUserId=jazzldapadmin
jazzPassword= jazzldapadmin_password
jazzRepoUrl=https://clm.oa.demo.com:9443/ccm
jazzCookiesFile=/tmp/jazzCookies.txt
jazzCCMQueryURL=https://clm.oa.demo.com:9443/ccm/resource/itemOid/com.ibm.team.workitem.query.QueryDescriptor/_I3ZToNPZEeaPEsEKhFWQIA?_mediaType=text/csv
 
# 模拟浏览器访问jts和ccm应用,非用户登录模式
curl -k -o check-jts.html -D check-jts.txt https://clm.oa.demo.com/jts/application-about
curl -k -o check-ccm.html -D check-ccm.txt https://clm.oa.demo.com/ccm/application-about
 
# 模拟浏览器进行用户登录,并保存cookie文件
rm -f $jazzCookiesFile
curl -v -k -c $jazzCookiesFile "$jazzRepoUrl/authenticated/identity" > /tmp/out 2> /tmp/err
curl -v -k -L -b $jazzCookiesFile -c $jazzCookiesFile -d j_username=$jazzUserId -d j_password=$jazzPassword "$jazzRepoUrl/authenticated/j_security_check" > /tmp/out 2> /tmp/err
 
# 模拟浏览器进行用户登录后,下载一个查询结果
curl -v -k -b $jazzCookiesFile -X GET $jazzCCMQueryURL > csv

RTC演示环境

相对于第一部分介绍的RTC自动化部署的通用步骤,部署RTC演示环境就要简单得多了。其中获取软件安装包的环节本身就在安装过程中,从jazz.net下载完成,另外,省却了专门安装配制DB2和WAS的环节:在安装CLM过程中可以选择默认安装的Liberty(6.0版本前只带tomcat)和derby作为应用服务器和数据库,几乎不需要专门设置,即可快速部署和使用。这种配置可以快速得到一个用于演示或实验的RTC环境,给用户提供一个学习和上手操作的地方。

对于普通用户,可以在Jazz.net社区注册帐户后,从CLM主页(https://jazz.net/downloads/clm/releases/6.0.4?p=allDownloads)或RTC主页(https://jazz.net/downloads/rational-team-concert/releases/6.0.4?p=allDownloads)直接下载IBM IM和CLM6.0.4的repository压缩包(JTS-CCM-QM-RM-JRS-RELM-repo-6.0.4.zip,其中附带60天期限的Trial License,如图2)。

jazz.net下载页面

离线安装

如果用户有在本地多次安装部署的需求,或访问jazz.net的速度慢,建议下载离线安装包(如表1和图2),定制用于安装CLM的offline-response.xml(如清单7)和用于快速Jazz注册的response文件(如清单5),使用脚本完成一次完整的自动化离线安装(如清单8)。

清单 7. 离线安装RTC演示环境使用的offline-response.xml
清单 8. 离线安装RTC演示环境
# 从jazz.net下载离线安装包
curl -u <jazz.net_account:jazz.net_password>  -o https://download.jazz.net/mirror/downloads/ibm-installation-manager/1.8.5.1/1.8.5.1/agent.installer.linux.gtk.x86_64_1.8.5001.20161016_1705.zip
curl -u <jazz.net_account:jazz.net_password>  -o https://download.jazz.net/mirror/downloads/clm/6.0.4/6.0.4/JTS-CCM-QM-RM-JRS-RELM-repo-6.0.4.zip
 
#解压缩并安装IBMIM
unzip agent.installer.linux.gtk.x86_64_1.8.5001.20161016_1705.zip -d /install/jazz.net/im
/install/jazz.net/im/tools/imcl install com.ibm.cic.agent -repositories /install/jazz.net/im/repository.config -installationDirectory /opt/IBM/InstallationManager/eclipse -acceptLicense -showProgress
 
#解压缩CLM-REPO
unzip -d /install/jazz.net/clm-repo JTS-CCM-QM-RM-JRS-RELM-repo-6.0.4.zip
 
 
# IBMIM回放安装模板进行静默安装
/opt/IBM/InstallationManager/eclipse/tools/imcl -acceptLicense -showProgress input offline-response.xml
 
# IBMIM检查其管理的安装结果
/opt/IBM/InstallationManager/eclipse/tools/imcl listInstalledPackages
/opt/IBM/InstallationManager/eclipse/tools/imcl listInstallationDirectories
 
#启动应用
/opt/IBM/JazzTeamServer/server/server.startup &
 
#模拟浏览器访问JTS和RTC
curl -k -o check-jts.html -D check-jts.txt https://clm.oa.demo.com:9443/jts/application-about
curl -k -o check-ccm.html -D check-ccm.txt https://clm.oa.demo.com:9443/ccm/application-about
 
#完成Jazz平台应用注册
cd /opt/IBM/JazzTeamServer/server
./repotools-jts.sh  -setup repositoryURL=https://clm.oa.demo.com:9443/jts adminUserId=jazzldapadmin adminPassword=jazzldapadmin_password logFile=response-clm-derby.log parametersFile=response-clm-derby.txt
 
# 模拟浏览器进行用户登录,并保存cookie文件
curl -v -k -c /tmp/jazzCookies.txt " https://clm.oa.demo.com:9443/ccm/authenticated/identity" > /tmp/out 2> /tmp/err
curl -v -k -L -b /tmp/jazzCookies.tx -c /tmp/jazzCookies.tx -d j_username=jazz.net_account -d j_password=jazz.net_password "https://clm.oa.demo.com:9443/ccm /authenticated/j_security_check" > /tmp/out 2> /tmp/err

在线安装

如果用户的演示环境在云上,磁盘空间有限,访问jazz.net速度很快,建议下载并使用在线安装包(如表1),访问jazz.net上的Repo库(如https://jazz.net/downloads/clm/6.0.4/6.0.4/install-repository/clm-offerings/repository)。基于快速Jazz注册的response文件(如清单5),使用脚本完成自动化在线安装(如清单9),可以节省下载和解压缩花费的时间的空间。

清单 9. 在线安装RTC演示环境
# 从jazz.net下载离线安装包
curl -u <jazz.net_account:jazz.net_password>  -o CLM-Web-Installer-Linux-6.0.4.zip  https://download.jazz.net/mirror/downloads/clm/6.0.4/6.0.4/CLM-Web-Installer-Linux-6.0.4.zip?tjazz=271222d4231449eea0ae41c21bdcb9fd
 
#解压缩
unzip -d /install/jazz/clm-web-installer CLM-Web-Installer-Linux-6.0.4.zip
 
#生成master_password_file.txt文件绑定jazz帐户和在线repo库
touch /install/master_password_file.txt
cd /install/jazz/clm-web-installer/im/linux.gtk.x86_64/tools
./imutilsc saveCredential -url https://jazz.net/downloads/clm/6.0.4/6.0.4/install-repository/clm-offerings/repository -userName jazz.net_account -userPassword jazz.net_password -secureStorageFile /install/credential.store -masterPasswordFile /install/master_password_file.txt
 
#使用在线repo库进行在线安装
cd /install/jazz/clm-web-installer/im/linux.gtk.x86_64
./installc -showVerboseProgress -input install-server.xml --launcher.ini silent-install.ini -secureStorageFile /install/credential.store -masterPasswordFile /install/master_password_file.txt -acceptLicense
 
#验证安装结果
/opt/IBM/InstallationManager/eclipse/tools/imcl listInstalledPackages
/opt/IBM/InstallationManager/eclipse/tools/imcl listInstallationDirectories
 
#启动应用
/opt/IBM/JazzTeamServer/server/server.startup &
 
#模拟浏览器访问JTS和RTC
curl -k -o check-jts.html -D check-jts.txt https://clm.oa.demo.com:9443/jts/application-about
curl -k -o check-ccm.html -D check-ccm.txt https://clm.oa.demo.com:9443/ccm/application-about
 
#完成Jazz平台应用注册
cd /opt/IBM/JazzTeamServer/server
./repotools-jts.sh  -setup repositoryURL=https://clm.oa.demo.com:9443/jts adminUserId=jazzldapadmin adminPassword=jazzldapadmin_password logFile=response-clm-derby.log parametersFile=response-clm-derby.txt
 
# 模拟浏览器进行用户登录,并保存cookie文件
curl -v -k -c /tmp/jazzCookies.txt " https://clm.oa.demo.com:9443/ccm/authenticated/identity" > /tmp/out 2> /tmp/err
curl -v -k -L -b /tmp/jazzCookies.tx -c /tmp/jazzCookies.tx -d j_username=jazz.net_account -d j_password=jazz.net_password "https://clm.oa.demo.com:9443/ccm /authenticated/j_security_check" > /tmp/out 2> /tmp/err

RTC生产环境

真实的企业应用场景在集成、灾备、高可用等方面对生产环境都有更高的要求,因此官方建议生产环境部署在WebSphere Application Server应用服务器(简称WAS)和DB2数据库上,并在CLM 6.0企业安装套件中提供了支持不同平台的WAS/IHS v8.5.5和DB2 v10.5的安装包。当然CLM也官方支持Oracle,MSSQL等主流数据库或应用服务器。

由于WAS和DB2都有独立的知识体系,对于新手来说学习曲线相对陡峭,配置比较复杂,因此本例讨论的自动化部署是针对基于WAS平台的CLM(包括RTC)生产环境的,通过自动化方式来降低安装和部署过程的复杂度。另外也满足在"云迁移"的需求,如何避免手动部署的错误,持续、快速、高效的在云环境中交付生产环境。

基于第一部分对RTC自动化部署的通用步骤和方法的介绍,这里重点介绍其中步骤中几个环节。

获取安装包

对于企业用户,可以从IBM支持站点Passport Advantage Online (http://www-01.ibm.com/software/cn/passportadvantage/pao_customer.html)登陆并下载包括WAS和DB2的CLM完整安装套件(如下图3)。

CLM安装套件

安装和配置DB2数据库

DB2是RTC生产环境中最重要的组成部分,保存着RTC的配置和研发过程所有数据,要尽可能提高DB2数据库服务器的可靠性。因此建议配置外部存储,减少故障风险和几率,此外通过划分存储为多个逻辑卷挂载到不同目录(如表2),达到应用和数据的分离,运行时数据和备份数据的分离,数据库数据内容和数据库日志的分离,避免存储出问题时,数据一损俱损的风险。

表2.文件系统配置

文件系统 VG LV 大小 OWNER 备注
/opt/ibm
/home/db2inst1
rootvg default 10GB db2inst1:db2iadm1 DB2安装目录,和用户目录(如db2inst1, db2fenc1, dasadm1)
/db2fs datavg lv_db2fs 50GB db2inst1:db2iadm1 数据库表空间
/db2path datavg lv_db2path 50GB db2inst1:db2iadm1 数据库目录、日志等
/db2backup datavg lv_db2backup 50GB db2inst1:db2iadm1 数据库备份文件

使用db2inst1用户创建DB2数据库(如清单10),包括jts,ccm,qm,rm,dw五个数据库,其中将DBPATH设置为/db2path,表空间设置为/db2fs的路径,同时设置参数AUTOCONFIGURE,在创建数据库时DB2会根据当前硬件环境自动配置相关参数。

清单 10. 创建DB2数据库
#/bin/bash
db2 "CREATE DATABASE jts ON /db2fs DBPATH ON /db2path USING CODESET UTF-8 TERRITORY US PAGESIZE 16 K AUTOCONFIGURE USING MEM_PERCENT 20 APPLY DB ONLY"
db2 "UPDATE DB CFG FOR jts USING LOGFILSIZ 20480 LOGPRIMARY 30 LOGSECOND 4"
db2 "CONNECT TO jts"
db2 "CREATE SCHEMA jts"
db2 "CONNECT RESET"
sleep 10
 
db2 "CREATE DATABASE ccm ON /db2fs DBPATH ON /db2path USING CODESET UTF-8 TERRITORY US PAGESIZE 16 K AUTOCONFIGURE USING MEM_PERCENT 20 APPLY DB ONLY"
db2 "UPDATE DB CFG FOR ccm USING LOGFILSIZ 20480 LOGPRIMARY 30 LOGSECOND 4"
db2 "CONNECT TO ccm"
db2 "CREATE SCHEMA ccm"
db2 "CONNECT RESET"
sleep 10
 
db2 "CREATE DATABASE qm ON /db2fs DBPATH ON /db2path USING CODESET UTF-8 TERRITORY US PAGESIZE 16 K AUTOCONFIGURE USING MEM_PERCENT 20 APPLY DB ONLY"
db2 "UPDATE DB CFG FOR qm USING LOGFILSIZ 20480 LOGPRIMARY 30 LOGSECOND 4"
db2 "CONNECT TO qm"
db2 "CREATE SCHEMA qm"
db2 "CONNECT RESET"
sleep 10
 
db2 "CREATE DATABASE rm ON /db2fs DBPATH ON /db2path USING CODESET UTF-8 TERRITORY US PAGESIZE 16 K AUTOCONFIGURE USING MEM_PERCENT 20 APPLY DB ONLY"
db2 "UPDATE DB CFG FOR rm USING LOGFILSIZ 20480 LOGPRIMARY 30 LOGSECOND 4"
db2 "CONNECT TO rm"
db2 "CREATE SCHEMA rm"
db2 "CONNECT RESET"
sleep 10
 
db2 "CREATE DATABASE dw ON /db2fs DBPATH ON /db2path USING CODESET UTF-8 TERRITORY US PAGESIZE 16 K AUTOCONFIGURE USING MEM_PERCENT 20 APPLY DB ONLY"
db2 "UPDATE DB CFG FOR dw USING LOGFILSIZ 20480 LOGPRIMARY 30 LOGSECOND 4"
db2 "CONNECT TO dw"
db2 "CREATE SCHEMA dw"
db2 "CONNECT RESET"
sleep 10

DB2数据库从安装、配置到创建,涉及到的步骤和配置文件,最终由一个脚本进行统一调度,使用root帐号执行(如清单11)

清单 11. 安装和配置DB2总脚本
#/bin/bash
#使用方式: /auto/db2/demo-db2-deployment-all-ins.sh > trace.log &
#默认机器名:db.oa.demo.com
#安装包保存:/install
#脚本保存:/auto
#使用root帐号执行
 
####1. 确认环境依赖包
yum install gcc*
#Only For Power Linux As below
yum install gcc*.ppc
yum install pam*.ppc
tar -zvxf vacpp.rte.121.linux_ppc.apr2013.update.tar.gz -C vacpp
 
####2. 解压缩
cd /install
tar -zvxf DB2_10.5.0.3_limited_Lnx_x86-64.tar.gz
 
####3. 静默安装
/install/server_r/db2setup -r /auto/db2/db2server.rsp
 
####4. 使用db2inst1帐号执行DB2配置操作
su - db2inst1 -c /auto/db2/auto-db2-config.sh
 
####5. 使用db2inst1帐号创建DB2数据库
su - db2inst1 -c /auto/db2/auto-db2-create.sh

安装和配置CLM

CLM安装包RCLM_SERVER_INSTALL_V_6.0.4_MP_ML.zip文件较大,包含了所有平台的安装包,所以要找到当前操作系统使用的installc,并使用自带的silent安装配置(.xml)文件,即可直接安装。本例中操作系统使用Power Linux,即使用如下命令。
 
unzip /install/RCLM_SERVER_INSTALL_V_6.0.4_MP_ML.zip -d /install/clm
/install/clm/im/linux.gtk.ppc/installc -acceptLicense -showVerboseProgress -input $installPath/clm/im/linux.gtk.ppc/silent-install-server2.xml --launcher.ini $installPath/clm/im/linux.gtk.ppc/silent-install.ini

安装和配置WAS/IHS

解压缩WAS 和WAS SUPPL包如下

unzip /install/WAS_V8.5.5_*.zip -d /install/was
unzip /install/WAS_V8.5.5_SUPPL_*.zip -d /install/ihs

使用之前CLM安装好的IBMIM做WAS/IHS的静默安装,命令如下

/opt/IBM/InstallationManager/eclipse/tools/imcl -acceptLicense -showProgress input /auto/was/was85.ihs.install.xml
/opt/IBM/InstallationManager/eclipse/tools/imcl -acceptLicense -showProgress input /auto/was/was85.plg.install.xml
/opt/IBM/InstallationManager/eclipse/tools/imcl -acceptLicense -showProgress input /auto/was/was85.wct.install.xml
/opt/IBM/InstallationManager/eclipse/tools/imcl -acceptLicense -showProgress input /auto/was/was85.base.install.xml
 
注:其中*.install.xml为IBMIM的response文件,可以参考/install/ihs/WAS_V8.5.5_SUPPL/responsefiles/samples中的response文件,修改并满足本地要求的安装文件。例如:was85.ihs.install.xml(如清单12),同时准备was85.plg.install.xml,was85.wct.install.xml和was85.base.install.xml。
清单 12. 静默安装IHS配置文件
<?xml version="1.0" encoding="UTF-8"?>
<agent-input clean="true" temporary="true">
<server>
<repository location="/install/ihs/repository.config" />
</server>
<install modify='false'>
<offering id='com.ibm.websphere.IHS.v85'
 profile='IBM HTTP Server for WebSphere Application Server V8.5'
 features='core.feature,arch.64bit' installFixes='none'/>
</install>
<profile id='IBM HTTP Server for WebSphere Application Server V8.5' installLocation='/opt/IBM/HTTPServer'>
<data key='eclipseLocation' value='/opt/IBM/HTTPServer'/>
<data key='user.import.profile' value='false'/>
<data key='cic.selector.nl' value='en'/>
<data key='user.ihs.httpPort' value='80'/>
</profile>
</agent-input>

创建WAS的Profile

创建Profile即创建WAS应用服务器的server,通过WAS提供的manageprofiles脚本,和名为default的profile模板,在/opt/IBM/WebSphere/AppServer/profiles/AppSrv01目录下创建WAS应用服务器server1,开启Security选项并使用admin作为默认管理员的用户和密码,命令如下。

/opt/IBM/WebSphere/AppServer/bin/manageprofiles.sh -create -profileName AppSrv01 -profilePath /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/ -templatePath /opt/IBM/WebSphere/AppServer/profileTemplates/default -enableAdminSecurity true -adminPassword admin -adminUserName admin

通过startServer和stopServer来起停server1应用服务器,其中stopServer需要输入用户名和密码。如有安全需求,命令行可以选择参数从文件中读取密码。详细解释

/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/bin/startServer.sh server1

/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/bin/stopServer.sh server1 -username admin -password admin

配置WAS属性

因为WAS手动配置操作比较繁琐, CLM为此提供了一些自动化配置WAS的脚本(在安装目录/opt/IBM/JazzTeamServer/server/was/下),我们可以充分利用。但对于在WAS添加LDAP配置信息,映射应用角色等环节,还需要根据环境自行定制。通过WAS的wsadmin,调用CLM提供的clm_was_config.py,直接对WAS的应用服务器Server1进行设置

/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/bin/wsadmin.sh \
    -language jython \
    -user admin \
    -password admin \
    -f /opt/IBM/JazzTeamServer/server/was/clm_was_config.py  \
    /opt/IBM/JazzTeamServer/server/conf

其中在clm_was_config.py文件中配置项包括以下内容

  1. 不选择Java2安全限制应用访问本地资源和'(Uncheck Use Java 2 security to restrict application access to local resources)
  2. 启用应用和管理安全模式(Application security和 administrative security)
  3. 设置JVM内存占用为4096,其中4G为建议值,可视系统情况而定
  4. 设置JVM args为"-Xmx4g -Xms4g -Xmn512m -Xgcpolicy:gencon -Xnocompressedrefs"
  5. 添加JVM参数: JAZZ_HOME value: /opt/IBM/JazzTeamServer/server/conf
  6. 添加JVM参数: java.awt.headless value: true
  7. 添加JVM参数: org.eclipse.emf.ecore.plugin.EcorePlugin.doNotLoadResourcesPlugin value: true
  8. 添加JVM参数: log4j.configuration value: /opt/IBM/JazzTeamServer/server/conf/startup_log4j.properties

配置WAS集成LDAP

本例使用openLDAP作为用户管理和身份验证服务器,需要和WAS直接集成。但CLM并没有提供脚本,因此我们需要通过分析LDAP服务器的相关信息,自定义的clm_ldap.py配置文件(如清单13),由wsadmin来自动化执行,命令如下:

/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/bin/wsadmin.sh \
    -language jython \
    -user admin \
    -password admin \
    -f clm_ldap.py \
    /opt/IBM/JazzTeamServer/server/conf
清单 13. WAS集成LDAP配置文件clm_ldap.py
#openldap <172.30.120.101> - OA Zone
AdminTask.configureAdminLDAPUserRegistry('[-userFilter (&(cn=%v)(objectclass=person)) -groupFilter (&(cn=%v)(objectclass=groupOfNames)) -userIdMap *:cn -groupIdMap *:cn -groupMemberIdMap title:member -certificateFilter -certificateMapMode EXACT_DN -krbUserFilter (&(krbPrincipalName=%v)(objectclass=ePerson)) -customProperties ["com.ibm.websphere.security.ldap.recursiveSearch="] -verifyRegistry false ]')
 
AdminTask.configureAdminLDAPUserRegistry('[-ldapHost 172.30.120.101 -ldapPort 389 -ldapServerType CUSTOM -baseDN dc=demo,dc=com -bindDN cn=jazzldapadmin_password,ou=JazzUser,dc=demo,dc=com -bindPassword jazzldapadmin_password -searchTimeout 120 -reuseConnection false -sslEnabled false -sslConfig -autoGenerateServerId true -primaryAdminId jazzldapadmin_password -ignoreCase false -customProperties -verifyRegistry false ]')
 
AdminTask.setAdminActiveSecuritySettings('-activeUserRegistry LDAPUserRegistry')
 
AdminConfig.save()

clm_ldap.py中很多关键参数来源于OpenLDAP的关键属性,可以通过LDAP工具识别和获取(如图4)

使用LDAP Browser读取LDAP信息

通过对LDAP服务器的分析,获得如下参数(如表2),可以修改和补充clm_ldap.py中定义的内容(如清单13),其中包括:

LDAP参数说明
编号 参数
1. userFilter (&(uid=%v)(objectclass=inetOrgPerson))
2. groupFilter (&(cn=%v)(objectclass=posixGroup))
3. userIdMap *:uid
4. groupIdMap *:cn
5. groupMemberIdMap memberOfGroup:memberUid
6. ldapHost <LDAP IP>
7. ldapPort 389
8. ldapServerType CUSTOM
9. baseDN dc=demo,dc=com
10. bindDN cn=jazzldapadmin,ou=JazzUser,dc=demo,dc=com
11. bindPassword secret
12. primaryAdminId jazzldapadmin

注意:不同的LDAP服务器在WAS上的属性设置会有很大差别,比如

  1. -primaryAdminId jazzldapadmin 说明访问和管理WAS的管理员账号已经从初始化的admin转移到jazzldapadmin,重新启动WAS后生效
  2. -bindDN cn=jazzldapadmin,ou=JazzUser,dc=demo,dc=com 说明管理员jazzldapadmin绑定到LDAP的DN(唯一名称标识)"cn=jazzldapadmin,ou=JazzUser,dc=demo,dc=com"上
  3. 对用户(user)和组(group)使用的objectClass差别会很大,在本例openLDAP环境中分别使用inetOrgPerson和posixGroup
  4. 用户和组会映射到不同的LDAP属性(Attribute)上,本例中为"*:uid"和"*:cn"
  5. 用户有指向所属组的属性,组有指向所属用户的属性,这些属性取决于objectClass的定义,但并不是所有的LDAP服务器都提供这种双向映射的属性,如openLDAP。因此需要改造openLDAP的entry定义,例如要在user entry上添加memberOfGroup属性,指向所属组,在group entry上添加memberUid属性,指向包含的用户。因此-groupMemberIdMap参数设置memberOfGroup:memberUid的映射关系,以便确定用户的角色和权限

在WAS上部署CLM应用

通过WAS的wsadmin,调用CLM提供的clm_deploy.py,在WAS应用服务器Server1 上部署JTS,CCM,QM,RM,CLMHELP等应用,命令如下

/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/bin/wsadmin.sh \
    -language jython \
    -user admin \
    -password admin \
    -f /opt/IBM/JazzTeamServer/server/was/clm_deploy.py clmNode01 server1 \
    /opt/IBM/JazzTeamServer/server/webapps/

注意:

  1. 所有应用的.war包在安装路径webapps下保存
  2. 命令中使用的Node名称"clmNode01"和server名称"server1"是WAS的节点名称,可以从WAS的Web控制台读取

映射CLM应用到角色组

CLM的权限控制是通过LDAP服务器定义的组和用户的关系决定的,JTS、CCM、QM三个应用部署完成后,都要把JazzAdmins,JazzProjectAdmins,JazzUsers,JazzDWAdmins,JazzUsers五种角色,映射到LDAP的组,用以帮助应用判断不同用户拥有的权限。因此如前面提到的,在LDAP中定义用户,必然要有指向所属组的属性,通过在应用上映射角色组的环节来定义其在CLM中的权限范围。

通过WAS的wsadmin,调用自定义的clm_app_mapping.py配置脚本(如清单14),完成应用角色与LDAP组的映射,命令如下:

/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/bin/wsadmin.sh \
    -language jython \
    -user admin \
    -password admin \
    -f clm_app_mapping.py /opt/IBM/JazzTeamServer/server/conf
清单 14. WAS集成LDAP配置文件clm_ app_mapping.py
......
#openldap <172.30.120.101> - OA Zone
AdminApp.edit('jts.war', '[ -MapRolesToUsers [[ JazzAdmins AppDeploymentOption.No AppDeploymentOption.No "" "cn=JazzAdmins,ou=JazzGroup,dc=demo,dc=com" AppDeploymentOption.No "" "group:172.30.120.101:389/cn=JazzAdmins,ou=JazzGroup,dc=demo,dc=com" ]]]' )
AdminApp.edit('jts.war', '[ -MapRolesToUsers [[ JazzDWAdmins AppDeploymentOption.No AppDeploymentOption.No "" "cn=JazzDWAdmins,ou=JazzGroup,dc=demo,dc=com" AppDeploymentOption.No "" "group:172.30.120.101:389/cn=JazzDWAdmins ,ou=JazzGroup,dc=demo,dc=com" ]]]' )
AdminApp.edit('jts.war', '[ -MapRolesToUsers [[ JazzUsers AppDeploymentOption.No AppDeploymentOption.No "" "cn=JazzUsers,ou=JazzGroup,dc=demo,dc=com" AppDeploymentOption.No "" "group:172.30.120.101:389/cn=JazzUsers,ou=JazzGroup,dc=demo,dc=com" ]]]' )
AdminApp.edit('jts.war', '[ -MapRolesToUsers [[ JazzGuests AppDeploymentOption.No AppDeploymentOption.No "" "cn=JazzGuests,ou=JazzGroup,dc=demo,dc=com" AppDeploymentOption.No "" "group:172.30.120.101:389/cn=JazzGuests,ou=JazzGroup,dc=demo,dc=com" ]]]' )
AdminApp.edit('jts.war', '[ -MapRolesToUsers [[ JazzProjectAdmins AppDeploymentOption.No AppDeploymentOption.No "" "cn=JazzProjectAdmins,ou=JazzGroup,dc=demo,dc=com" AppDeploymentOption.No "" "group:172.30.120.101:389/cn=JazzProjectAdmins,ou=JazzGroup,dc=demo,dc=com" ]]]' )
AdminApp.edit('jts.war', '[ -MapRolesToUsers [[ JazzDebug AppDeploymentOption.No AppDeploymentOption.No "" "cn=JazzDebug,ou=JazzGroup,dc=demo,dc=com" AppDeploymentOption.No "" "group:172.30.120.101:389/cn=JazzDebug,ou=JazzGroup,dc=demo,dc=com" ]]]' )
AdminConfig.save()
 
....

注意:

  1. JTS、CCM和QM这三个应用都需要5种角色的映射,因此在jython脚本中需要逐一定义AdminApp(共15行),来进行映射
  2. jts.war是已部署应用的名称,由前面部署应用脚本决定的
  3. 第三个参数AppDeploymentOption.No表示"Special Subject"设为None,执行后控制台效果(如图5)

通过WAS控制台录制AdminTask

上面所有在WAS上的变更配置,需要重新起动才能生效

/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/bin/stopServer.sh server1 -username admin -password admin
/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/bin/startServer.sh server1

注意

  1. 关闭server1的命令上仍然使用admin的用户和密码
  2. 重新启动后,WAS命令行和登陆的管理员用户要改成jazzldapadmin(来自于LDAP上的用户定义)

配置IHS

配置WAS集成IHS之前,需要设置IHS的SSL属性,并生成子签名证书,命令如下。

mkdir -p /opt/IBM/keys
/opt/IBM/HTTPServer/bin/gskcmd -keydb -create -db /opt/IBM/keys/ihskeys.kdb -pw secret -expire 3650 -stash -type cms
/opt/IBM/HTTPServer/bin/gskcmd -cert -create -db /opt/IBM/keys/ihskeys.kdb -label clm.rnd.demo.com -expire 3650 -dn "CN=clm.rnd.demo.com" -default_cert yes -pw secret

在IHS配置文件(/opt/IBM/HTTPServer/conf/httpd.conf)中确认添加SSL设置信息,和IHS的自签名证书等(如清单15)。

清单 15. IHS配置文件
.....
LoadModule ibm_ssl_module modules/mod_ibm_ssl.so
Listen 0.0.0.0:443
#Listen 443
<VirtualHost *:443>
SSLEnable
</VirtualHost>
KeyFile /opt/IBM/keys/ihskeys.kdb
SSLStashFile /opt/IBM/keys/ihskeys.sth
SSLDisable

重新启动IHS服务器(如下),并验证443端口可访问

/opt/IBM/HTTPServer/bin/apachectl restart

配置WAS集成IHS

通过wsadmin在配置WAS和IHS的集成,调用自定义的proxy_was_loca.py配置文件(如清单16),其中包括在WAS中设置IHS Plug-ins 和Web容器参数。命令如下。

/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/bin/wsadmin.sh -language jython -user jazzldapadmin -password jazzldapadmin_password -f /auto/was/proxy_was_local.py
清单 16. WAS集成IHS设置文件proxy_was_local.py

完成Jazz应用注册

基于前面配置好的WAS,IHS反向代理服务器和DB2数据库服务器,使用CLM提供的repotools-jts命令进行应用注册,其中使用的response-clm-db2-proxy.txt注册脚本(如清单17)已经对URI和DB Provider等参数进行了调整。

cd /opt/IBM/JazzTeamServer/server

./repotools-jts.sh -setup repositoryURL=https://clm.oa.demo.com/jts adminUserId=jazzldapadmin adminPassword=jazzldapadmin_password logFile= response-clm-db2-proxy.log parametersFile=/auto/clm/response/response-clm-db2-proxy.txt

清单 17. 基于反向代理和Derby的jtstools-jts注册脚本

离线安装脚本

上面描述的各个环节由一个脚本统一调度(如清单18),经过最后验证环境可用之后,再统一挂载正式license,RTC生产环境入列。

清单 18. 安装和和配置CLM/WAS/IHS总脚本

RTC云环境

RTC及其所属CLM解决方案,作为面向研发管理各个环节的企业级应用软件,已经实现了多种"云化"变身的案例。在IBM公有云的BlueMix(https://console.ng.bluemix.net,如图6)上,提供的以Jazz和RTC为后台的SaaS服务Track & Plan (原名IBM BlueMix DevOps Service,https://hub.jazz.net/)。

IBM BlueMix DevOps中的Track & Plan

点击查看大图

在私有云领域,IBM通过PureApp提供的CLM Patterns进行自动化部署。但对于DevOps在云端的场景,更多还要侧重于混合云管理与DevOps协作的融合(如图7)。其中,混合云管理部分针对部署:获取部署过程代码和项目代码,在不同的云平台上按照统一规格进行安装和配置用于开发、测试、生产的各种环境;DevOps协作部分针对研发管理:从需求、开发、构建、测试到交付项目代码和部署代码。二者之间在管理代码、构建、仓库的环节都有交集,而且都可以在云端完成的。

混合云管理与DevOps协作的融合

因此,我们上面讨论的自动化部署RTC生产环境可以当作一个例子,通过对自动化部署的执行和管理,不仅可以解决企业应用运维时的问题,还可以统一开发、测试、准生产和生产环境的部署和管理,可视化整个部署过程,实时展示部署进度及结果,同时也体现研发环节的阶段性输出。如果能将研发协作、源代码管理、持续集成、持续部署、持续测试和Artifacts管理统一起来,最终就可以在混合云环境中实现DevOps闭环。

参考资料

学习

获得产品和技术

讨论

  • 加入Jazz.net Community,与Jazz研发团队直接交流
  • 加入developerWorks 中文社区,developerWorks 社区是一个面向全球 IT 专业人员,可以提供博客、书签、wiki、群组、联系、共享和协作等社区功能的专业社交网络社区。