在本教程中, 您将了解在 IBM App Connect(前称为 webSphere® Cast Iron®)上如何使用 IBM App Connect 管理 APISoapUI 客户端和 Jenkins 实现部署自动化
优势
部署自动化:
完全自动部署 IBM App Connect 编排操作
通过 Cast Iron 管理控制台减少部署工作量并节省部署时间
自动执行部署可实现端到端的可跟踪性
实现部署活动的可跟踪性并提高部署质量, 缩短应用和环境的宕机时间
前提条件
要学习本教程, 您需要安装以下程序并满足相应条件:
IBM App Connect 7.5.0 或更高版本
GitLab 或 GitHub, 这样就可以检入 PAR 和部署属性文件(此处使用了 GitLab 帐户)
SoapUI 5.2.1 或更高版本
最新版本的 Jenkins
掌握 DevOps 基础知识
整篇教程中使用的首字母缩略词
SOAP: 简单对象访问协议
WSDL:Web 服务描述语言
PAR: 用于打包 IBM App Connect 模块二进制文件的归档文件 Parchive 是一种纠删码, 用于创建 PAR 文件, 以便对数据完整性进行校验和验证
API: 应用编程接口
SaaS: 软件即服务
WMC:Web 管理控制台
IBM App Connect Professional(前称为 Cast Iron)是一个用于将基于云的 SaaS 应用与本地应用相集成的平台 它是一种拖放式开发工具, 用于构建复杂的集成流
IBM App Connect 具有两种实现模型:
设备模型 设备可为物理硬件, 也可为虚拟机
SaaS 模型 (IBM App Connect Professional SaaS) 物理虚拟和 SaaS 这三种形式都支持云到云集成云到本地集成和本地到本地集成每种形式都支持实时集成近乎实时的集成和批量集成
要访问 IBM App Connect 运行时, 请使用以下任一接口:
管理 API (Web Service)
命令行接口(CLI)
WMC
设备 API
设备管理 API 是一个 Web Service 层, 支持以 SOAP 请求形式使用 Web Service 调用来执行如下各种任务, 从而实现对 IBM App Connect 运行时的管理:
发布
启动
停止
取消部署删除
导出配置
规划项目
该响应采用 SOAP 响应形式
IBM App Connect 集成设备可提供不同 API 来执行与 IBM App Connect 管理相关的各种功能可通过以下项来访问这些 API:
- Security.wsdl
- Staging.wsdl
- Deployment.wsdl
- System.wsdl
- Orcmon.wsdl
- Lognotif.wsdl
部署 WSDL 包含与以下操作有关的信息: 发布 PAR 文件启动 PAR 文件停止编排取消编排部署删除编排导出项目和导出配置等在 SoapUI 中下载 https://<appliance-management-port>/ws/deployment?wsdl 部署 WSDL
安全性 WSDL 包含登录和注销操作, 用于建立管理 API 会话在 SoapUI 中下载 https://<appliance-management-port>/ws/security?wsdl 安全性 WSDL 以下章节中描述了详细信息
IBM App Connect 部署自动化的配置
IBM App Connect 部署的自动化配置包含两个主要流程:
使用 SOAPUI 配置 套件测试, 以便依次调用设备 API(登录发布注销等)
自动执行 Jenkins 所创建测试套件的上述调用操作
配置测试套件以调用设备 API
图 1 中显示了发布 PAR 文件和启动编排的基本步骤您将登录 IBM App Connect 上载并部署 PAR 文件启动此 PAR 文件的编排过程, 然后注销 IBM App Connect 下面描述了运行上述操作的详细步骤
备注: 无论是通过 IBM App Connect WMC 还是 App Connect 管理 API 来部署, 此流程图都是相同的
图 1. 部署步骤的流程图
点击查看大图
第 1 步. 在 SoapUI 上创建一个 SOAP 项目
打开 SoapUI, 单击 File> Create Empty Project 创建一个空项目默认情况下, 此项目名为 Project1 您可按自己的喜好随意命名该项目对于本教程, 该项目重命名为 CastIron_Deployment
也可以通过单击 File> New SOAP Project 来创建新的 SOAP 项目在打开的对话框中输入名称 CastIron_Deployment
第 2 步. 添加用于安全性和部署的 WSDL
右键单击 CastIron_Deployment 项目, 并添加安全性和部署 WSDL(如图 2a2b 和 2c 中所示)图 2a 显示了本步骤的第一个分步, 即, 将 WSDL 添加到项目中右键单击 CastIron_Deployment 项目, 并单击 Add WSDL
图 2a. 将 WSDL 添加到项目中
点击查看大图
这样会打开 Add WSDL 对话框要添加安全性, 请在 WSDL Location 文本框中输入(或浏览至)
https://appliance-management-port/ws/security?wsdl
, 如图 2b 中所示
图 2b. 添加安全性 WSDL
点击查看大图
您还要添加部署 WSDL 右键单击 CastIron_Deployment 项目, 并单击 Add WSDL 这样会打开 Add WSDL 对话框要添加部署, 请在 WSDL Location 文本框中输入(或浏览至)
https://appliance-management-port/ws/deployment?wsdl
, 如图 2c 中所示
图 2c. 添加部署 WSDL
点击查看大图
第 3 步. 创建一个测试案例
右键单击 CastIron_Deployment 项目, 并选择 New TestSuite, 如图 3a 中所示
图 3a. 添加新的 TestSuite
点击查看大图
如前所述, 右键单击 TestSuite1, 并选择 New TestCase, 如图 3b 中所示
图 3b. 添加一个测试案例
点击查看大图
默认情况下, 新的测试案例名为 TestCase1 右键单击 TestCase1 并选中 Rename, 将其重命名为 PublishandStart, 如图 3c 中所示
图 3c. 重命名一个测试案例
点击查看大图
点击查看大图
第 4 步. 将 PAR 和属性文件上传至 GitLab
接下来, 您需要将 PAR 文件和部署属性文件上传至 GitLab 帐户属性文件具有 .properties 扩展名属性文件在 Java 技术中主要用于存储应用的可配置参数. properties 文件中的每一行通常会存储单个属性, 采用键值对格式图 4 显示了名为
publishPar.properties
并具有以下属性的部署属性文件:
- projectName
- version
- config
- FileName
应创建此文件并将其上传至 GitLab
图 4. 部署属性文件 (publishPar.properties)
点击查看大图
第 5 步. 定义测试步骤
测试步骤细分为:
第 5a 步: 登录此步骤使用户身份登录到 IBM App Connect 设备
第 5b 步: 在 SoapUI 上附加可部署的 PAR 文件在此步骤期间, 可部署的 PAR 文件可供测试案例访问
第 5c 步: 传输生成的 SessionId 在 IBM App Connect 中, 用户经认证后才能执行任何管理活动如果要执行任何其他活动(例如, 发布或注销), 那么在登录后, 用户必须获得授权因此, 必须传输 SessionId, 为特定用户会话调用任何操作(或测试案例)
第 5d 步: 发布 PAR 文件此步骤会在 IBM App Connect 中部署 PAR 文件
第 5e 步: 启动编排操作在第 5d 步中部署 PAR 文件后, 可能已经或尚未在 IBM App Connect 中启动编排操作, 这取决于具体要求此步骤会根据需要在 IBM App Connect 中启动编排操作
第 5f 步: 注销当前会话此步骤会注销用户
第 5a 步. 登录
在 SoapUI 导航器中, 右键单击 Test Steps 在弹出菜单中, 单击 Add Step, 然后单击 SOAP Request, 如图 5 中所示
图 5. 在 SoapUI 中添加 SOAP 请求
点击查看大图
这样会打开 New TestRequest 窗口从列表中选择 SecurityManagerPortBinding> login 选项, 然后单击 OK, 如图 6 中所示
图 6. 通过 SecurityManagerPortBinding -> login 选择登录设备 API 请求
点击查看大图
在
<sec:username> </sec:username>
标签之间添加用户名在
<sec:password> </sec:password>
标签之间添加密码, 如图 7 中所示单击 Save 以保存此项目
图 7.LoginSOAPRequest
点击查看大图
如果成功, 此登录请求会生成 SessionId 用于用户认证此 SessionId 会传递至其余步骤
第 5b 步. 在 SOAPUI 上附加可部署的 PAR 文件
右键单击 Test Steps, 然后单击 Add Step 选择 Groovy Script, 如图 8 中所示此脚本会在 SoapUI 中从指定位置上传 PAR 文件此脚本使用您上传至 GitLab 的部署属性文件, 如图 4 中所示
图 8. 添加 Groovy 脚本
点击查看大图
将以下脚本复制并粘贴到 Groovy 脚本窗口中, 以便 SoapUI 可以访问并上传 PAR 文件, 将其发布至 IBM App Connect:
- import org.custommonkey.xmlunit.*
- import java.util.Random
- import java.security.MessageDigest
- import java.nio.file.*
- def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
- def projectPath = groovyUtils.projectPath
- log.info projectPath
- Properties properties = new Properties()
- File propertiesFile = new File('C:\\Jenkins\\workspace\\CastIronDeployment\\publishPar.properties')
- propertiesFile.withInputStream {properties.load(it)}
- def project = testRunner.testCase.testSuite.project
- log.info "Project:" + project.name
- def myTestSuite = testRunner.testCase.testSuite;
- log.info "TestSuite:" + myTestSuite.name
- def testCase = testRunner.testCase
- log.info "TestCase:" + testCase.name
- def testStepUploadDataAfterCheck = testCase.getTestStepByName("PublishSOAPRequest")
- def request= testStepUploadDataAfterCheck.testRequest
- log.info "TestStep:" + testStepUploadDataAfterCheck.name
- // clear existing attachments
- for( a in request.attachments ) {
- request.removeAttachment( a )
- }
- def propFileNamePath='FileNamePath'
- def propFileName='FileName'
- //FileNamePath
- //def fileNamePath = testCase.getTestStepAt(testRunner.testCase.getTestStepIndexByName("FileNameProperties")).getProperty("FileNamePath")
- def fileNamePath = properties."$propFileNamePath"
- //log.info fileNamePath
- //log.info properties."$propFileNamePath"
- //FileName
- //def fileName = testCase.getTestStepAt(testRunner.testCase.getTestStepIndexByName("FileNameProperties")).getProperty("FileName")
- def fileName = properties."$propFileName"
- //log.info fileName
- // get file to attach
- // log.info "file to attach:" + fileNamePath.getValue()
- log.info "file to attach:" + fileNamePath
- //def file = new File(fileNamePath.getValue() )
- def file = new File(fileNamePath)
- if ( file == null) {
- log.error "bad filename"
- }
- else
- {
- // attach and set properties
- def attachment = request.attachFile( file, true )
- attachment.contentType = "application/octet-stream"
- //attachment.setPart(fileName.getValue())
- attachment.setPart(fileName)
- def holder2 = groovyUtils.getXmlHolder( "PublishSOAPRequest#Request" ) // Get Request body
- //holder2.setNodeValue( "//dep:publishProject/content","cid:"+fileName.getValue()); //Set "link" to attachment in request body
- holder2.setNodeValue( "//dep:publishProject/content","cid:"+fileName); //Set "link" to attachment in request body
- holder2.updateProperty() //and update
- //log.info fileName.getValue()
- log.info fileName
- log.info "file attached succesfully"
- }
第 5c 步. 传输生成的 SessionId
现在, 您需要传输第 5a 步中获取的 SessionId, 然后将其传入第 5d5e 和 5f 步中
右键单击 Test Steps, 选择 Add Step, 然后选择 Property Transfer, 如图 9 中所示这样会将登录响应的 SessionId 传输至所有其他测试步骤
XPATH 查询可通过请求将 SessionId 从登录响应传输至发布 (第 4d 步) 启动 (第 4e 步) 和注销 (第 4f 步) 步骤
下图显示了如何将 SessionId 从登录步骤传递至注销步骤 (如图 11a 中所示) 同样, 还显示了如何将 SessionId 传输至发布步骤 (如图 11b 中所示) 和启动编排步骤(如图 11c 中所示)
图 9. 添加步骤: 属性传输
点击查看大图
单击 + 图标 (在图 10 中以红色突出显示) 来添加属性传输这样会打开一个对话框在 Specify name for value transfer 文本框中输入名称 transferSessionId 此步骤将重复三次, 如图 11a11b11c 中所示
图 10. 在属性传输步骤中添加传输内容
点击查看大图
图 11a. 用于将 SessionID 从登录步骤传输到注销步骤的属性传输 XPATH 查询
点击查看大图
图 11b. 用于将 SessionID 从登录步骤传输到 PublishSOAPRequest 步骤的属性传输 XPATH 查询
点击查看大图
图 11c. 用于将 SessionID 从登录步骤传输到 StartRequest 步骤的属性传输 XPATH 查询
点击查看大图
第 5d 步. 发布 PAR 文件
要发布 PAR 文件, 首先需要添加一个测试步骤作为 SOAP 请求, 如图 5 中所示打开 New TestRequest 窗口后, 从列表中选择 DeploymentManagerPortBinding> publishProject, 如图 12 中所示
图 12. 发布请求
点击查看大图
图 13 中显示了 PublishSOAPRequest
图 13.PublishSOAPRequest
点击查看大图
第 5e 步. 部署完成后启动编排操作(可选)
根据需求, 在发布步骤后, 可能需要启动编排操作如果未启动编排操作, IBM App Connect WMC 会显示该项目状态为已取消部署如果成功启动编排操作, 那么编排状态会显示为正在运行
如果要求启动编排操作, 那么启动设备调用必须处于启用状态否则, 启动 API 调用必须处于禁用状态为完成此操作, 请右键单击 Test Steps, 单击 Add Step, 选择 Groovy Script(如图 8 中所示), 然后添加以下 Groovy 脚本, 使启动调用处于启用或禁用状态:
- Properties properties = new Properties()
- File propertiesFile = new File('C:\\Jenkins\\workspace\\CastIronDeployment\\publishPar.properties')
- propertiesFile.withInputStream {properties.load(it)}
- def enableStart='enableStart'
- if (properties."$enableStart"=="true"){
- def testStep = testRunner.testCase.getTestStepByName( "StartRequest" )
- log.info testStep.disabled
- if(testStep.disabled){
- testStep.disabled = false
- }
- log.info testRunner.testCase.getTestStepByName( "StartRequest" ).disabled
- }
- else if (properties."$enableStart"=="false") {
- log.info "Orchestration will not be started"
- def testStep = testRunner.testCase.getTestStepByName( "StartRequest" )
- log.info testStep.disabled
- if(!testStep.disabled){
- testStep.disabled = true
- }
- log.info testRunner.testCase.getTestStepByName( "StartRequest" ).disabled
- }
- else
- log.info "Incorrect value for enableStart in properties file."
右键单击 Test Steps, 并添加新测试步骤作为 SOAP 请求从列表中选择 DeploymentManagerPortBinding> start 请求, 如图 14 中所示
图 14. 启动请求
点击查看大图
图 15 显示了针对启动编排操作的管理 API 调用
图 15. 启动编排操作的 SOAP 请求
点击查看大图
第 5f 步. 从当前会话注销
右键单击 Test Steps, 并添加新测试步骤作为 SOAP 请求, 如图 5 中所示选择 SecurityManagerPortBinding> logout 请求, 如图 16 中所示
图 16. 注销请求
点击查看大图
图 17 显示了 LogoutSOAPRequest 对话框
图 17.SOAP 注销请求
点击查看大图
图 18 显示了包含七个测试步骤的最终测试套件配置:
- LoginSOAPRequest
- UploadDataAfterCheck
- Property Transfer
- PublishSOAPRequest
- SelectTestStep
- StartRequest
- LogoutSoapRequest
图 18. 包含测试步骤的 SoapUI 项目导航器
点击查看大图
第 6 步. 导出包含测试套件的 SoapUI 项目
右键单击 SoapUI 项目, 并单击 Save Project 提示输入文件名时, 将测试套件命名为
CastIron-Deployment-soapui-project.xml
, 如图 19a 中所示
图 19a. 保存 SoapUI 项目
点击查看大图
图 19b 显示了已上传至 GitLab 的 CastIron-Deployment-soapui-project.xml 文件
图 19b.GitLab 上的 CastIron-Deployment-soapui-project.xml
点击查看大图
通过 Jenkins CI 自动调用测试套件
现在即可将 Jenkins 用作持续集成 (CI) 引擎, 以编排部署自动化
第 1 步. 配置 SOAP UI shell 脚本
第一步是将 SoapUI 默认 shell 脚本 (
{SOAPUI_HOME}/bin/ testrunner.sh
) 更改为与属性文件一起运行在此情况下, 将其更改为运行 Jenkins 作业在后续步骤中创建的
publishPar.properties
属性文件
图 20. 将 testrunner.sh 更改为包含属性文件
点击查看大图
第 2 步. 配置 Jenkins 作业以运行 SoapUI 项目
将创建 Jenkins 作业来运行 SoapUI 项目
第 2a 步. 输入部署属性
设置构建所需参数:
targetenv: 构建的目标环境
propertyFileName: 上传至 Git 存储库中的属性文件名
Filename: 必须在 IBM App Connect 中发布的 PAR 文件名
enableStart:True = 发布 PAR 文件后启动编排操作 False = 部署 PAR 文件后不启动编排操作
图 21. 必需参数
点击查看大图
第 2b 步. 从 GitLab 下载 PAR 文件和属性文件
在 Jenkins 作业中, 单击作业名称(对于此教程, 作业名称为 CastIronDeployment_dev)
图 22a. 单击 Jenkins 作业名称
点击查看大图
单击 Configure
图 22b.Jenkins 项目 CastIronDeployment_dev 作业
点击查看大图
这样会打开配置窗口选择 Source Code Management 选项卡, 然后选择 Git 单选按钮在 Repository URL 字段中, 输入指向 Git 中的存储库的链接
图 22c. 将 SCM 设置为 GitLab
点击查看大图
第 2c 步. 创建一个属性文件, 用于在运行时将部署属性与基本属性文件组合在一起
单击 Build 选项卡要创建新属性, 请运行以下图 23 中的 shell 脚本 (第 1 - 10 行) 本教程的下载部分提供了此脚本 (Jenkins Shell Script.txt)
图 23. 使用 Jenkins 脚本创建一个属性文件
点击查看大图
图 24 显示了在运行时合并的属性文件请注意, 按开发团队和部署团队列出了这些属性
图 24. 合并的属性文件
点击查看大图
第 2d 步. 使用 shell 脚本运行 SoapUI 测试套件
图 25 显示了 Jenkins Shell Script.txt shell 脚本 (在下载部分中提供) 您将在 Build 下的部分中添加此脚本(第 13 - 15 行)
图 25. 运行 shell 脚本
点击查看大图
第 2e 步. 备份部署工件
在 Post-build Actions 选项卡上, 您将会看到 Archive the artifacts 部分将对文件系统中的工件 PAR 文件属性文件和日志文件进行归档您可在以下位置访问这些归档:
{JENKINS_HOME}/jobs/{JENKINS_JOB_NAME}/builds/{JENKINS_JOB_NO.}/archive
图 26. 存储构建后工件
点击查看大图
结束语
本教程说明了 IBM App Connect 管理 API 如何以灵活的方式管理设备和编排 IBM App Connect 可与 DevOps 工具轻松集成, 促进实现部署自动化, 并可配置交付渠道
本教程中使用的文件
Jenkins-Shell-Script.sh 用于运行 SoapUI 项目
Groovy Script PAR 文件附加到 SoapUI 项目中, 以便可以发布
publishPar.properties 是包含部署属性的属性文件
下载资源
Sample scripts
http://www.ibm.com/developerworks/apps/download/index.jsp?contentid=1059102&filename=Sample_Scripts.zip&method=http&locale=zh_CN
来源: http://www.ibm.com/developerworks/cn/devops/d-app-connect-deployment-automation-jenkins-ci/index.html