在本教程中,您将了解使用IBM App Connect Management API,SoapUI客户端和Jenkins在IBM App Connect(以前称为WebSphere®CastIron®)上的部署自动化。
部署自动化:
完全自动化IBM App Connect业务流程的部署。 通过Cast Iron管理控制台节省了部署工作的时间和精力。 自动化部署可导致端到端的可处理性。 完成部署活动的易处理性,提高部署质量,减少应用程序和环境的停机时间。要继续进行,您需要:
IBM App Connect 7.5.0或更高版本 GitLab或GitHub ,因此您可以检入PAR和部署属性文件(此处使用了GitLab帐户) SoapUI 5.2.1或更高版本 最新版本的詹金斯 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(网络服务) 命令行界面(CLI) WMC设备管理API是一个Web服务层,它允许使用SOAP请求形式的Web服务调用来执行任务,从而管理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部署的自动化配置包含两个主要过程:
使用SOAPUI配置测试套件,以依次调用设备API(登录,发布,注销等)。 自动化上述对Jenkins创建的测试套件的调用。图1显示了发布PAR文件和启动业务流程的基本步骤。您将登录到IBM App Connect,上传并部署PAR文件,启动该PAR文件的业务流程,然后注销IBM App Connect。 。 运行它的详细步骤如下所述。
注意 :无论是通过IBM App Connect WMC还是通过App Connect Management API进行部署,此流程图均相同。
打开SoapUI并通过单击文件>创建空项目来创建一个空项目。 默认情况下,该项目名为Project1。 您可以使用自己喜欢的名称重命名项目。 在本教程中,该项目被重命名为CastIron_Deployment。
创建新SOAP项目的另一种方法是单击文件>新建SOAP项目 。 在打开的对话框中键入名称CastIron_Deployment 。
右键单击项目CastIron_Deployment并添加安全性和部署WSDL(如图2a,2b和2c所示)。 图2a显示了第一步,该步骤将WSDL添加到项目中。 右键单击CastIron_Deployment项目,然后单击添加WSDL 。
将打开“添加WSDL”对话框。 要添加安全性,请在WSDL位置文本框中输入(或浏览到) https://appliance-management-port/ws/security?wsdl ,如图2b所示。
您还需要添加部署WSDL。 右键单击CastIron_Deployment项目,然后单击添加WSDL 。 将打开“添加WSDL”对话框。 要添加部署,请在WSDL Location文本框中键入(或浏览到) https://appliance-management-port/ws/deployment?wsdl ,如图2c所示。
右键单击项目CastIron_Deployment,然后选择New TestSuite ,如图3a所示。
与之前一样,右键单击TestSuite1并选择New TestCase ,如图3b所示。
默认情况下,新的测试用例名为TestCase1 。 右键单击TestCase1并选择Rename ,将其重命名为PublishandStart ,如图3c所示。
接下来,您需要将PAR文件和部署属性文件上载到GitLab帐户。 属性文件的扩展名为.properties 。 属性文件主要用于Java™技术中,以存储应用程序的可配置参数。 .properties文件中的每一行通常以键值对格式存储单个属性。 图4显示了名为publishPar.properties的部署属性文件, publishPar.properties包含以下属性:
项目名称 版 配置 文档名称这个文件应该被创建并上传到GitLab。
测试步骤细分为:
步骤5a:登录。 此步骤将用户登录到IBM App Connect设备。 步骤5b:在SoapUI上附加可部署的PAR文件。 在此步骤中,使可部署的PAR文件可供测试用例访问。 步骤5c:传输生成的SessionId。 在IBM App Connect中,在执行任何管理活动之前,先对用户进行认证。 如果要执行任何其他活动(例如发布或注销),则登录后必须授权用户。 因此,必须传递SessionId才能调用特定用户会话的任何操作(或测试用例)。 步骤5d:发布PAR文件。 此步骤将PAR文件部署在IBM App Connect中。 步骤5e:开始编排。 在步骤5d中部署PAR文件之后,根据需要,IBM App Connect中的业务流程可能会开始(也可能不会)。 如果需要,此步骤将启动IBM App Connect中的编排。 步骤5f:注销当前会话。 此步骤注销用户。在SoapUI导航器中,右键单击“ 测试步骤” 。 在弹出菜单中,单击Add Step然后单击SOAP Request ,如图5所示。
将打开“新建TestRequest”窗口。 从列表中选择SecurityManagerPortBinding>登录选项,然后单击OK ,如图6所示。
在<sec:username> </sec:username>标记之间添加用户<sec:username> </sec:username> 。 在<sec:password> </sec:password>标记之间添加密码,如图7所示。单击Save保存项目。
如果成功,此登录请求将生成一个SessionId用于用户验证。 此SessionId传递到其余步骤。
右键单击“ 测试步骤” ,然后单击“ 添加步骤” 。 选择Groovy Script ,如图8所示。此脚本从指定位置上载SoapUI中的PAR文件。 该脚本使用您上载到GitLab的部署属性文件,如图4所示。
将以下脚本复制并粘贴到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" }现在,您需要传输在步骤5a中获得的SessionId,然后在步骤5d,5e和5f中传递。
右键单击Test Steps ,选择Add Step ,然后选择Property Transfer ,如图9所示。这会将登录响应的SessionId转移到所有其他测试步骤。
XPATH查询通过从登录响应到发布(步骤4d),开始(步骤4e)和注销(步骤4f)的请求来传递SessionId。
下图显示了如何将SessionId从登录步骤传递到注销步骤(如图11a所示)。 类似地,如何将SessionId转移到图11b所示的发布步骤并开始编排步骤,如图11c所示。
单击+图标(在图10中以红色突出显示)以添加属性传输。 这将打开一个对话框。 在“ 为值传输指定名称”文本框中键入名称transferSessionId 。 您将重复此步骤3次,如图11a,b和c所示。
要发布PAR文件,首先需要添加一个测试步骤作为SOAP请求,如图5所示。在“ New TestRequest”窗口打开后,从列表中选择DeploymentManagerPortBinding> publishProject ,如图12所示。
PublishSOAPRequest如图13所示。
根据要求,在发布步骤之后,可能需要启动业务流程。 如果编排未开始,则IBM App Connect WMC将显示该项目状态为未部署。 如果业务流程成功启动,那么业务流程将显示运行状态。
如果需要开始业务流程,则需要启用启动设备调用。 否则,您必须禁用启动API调用。 为此,右键单击Test Steps ,单击Add Step ,选择Groovy Script ,如图8所示,然后在下面添加Groovy Script以启用或禁用开始调用:
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."右键单击“ 测试步骤”,然后将新的测试步骤添加为SOAP请求。 从列表中选择DeploymentManagerPortBinding>启动请求,如图14所示。
图15显示了对开始业务流程的管理API调用。
右键单击Test Steps,然后将新的测试步骤添加为SOAP请求,如图5所示。选择SecurityManagerPortBinding>注销请求,如图16所示。
图17显示了LogoutSOAPRequest对话框。
图18显示了最终的测试套件配置,其中包括七个测试步骤:
LoginSOAPRequest UploadDataAfterCheck 财产转让 发布SOAP请求 选择测试步骤 开始请求 注销SoapRequest右键单击SoapUI项目,然后单击保存项目 。 当提示您输入文件名时,将测试套件命名为CastIron-Deployment-soapui-project.xml ,如图19a所示。
图19b显示了上载到GitLab的CastIron-Deployment-soapui-project.xml文件。
现在是时候使用Jenkins作为持续集成(CI)引擎来协调部署自动化了。
第一步是更改SoapUI默认外壳脚本( {SOAPUI_HOME}/bin/ testrunner.sh )以与属性文件一起运行。 在这种情况下,将其更改为运行Jenkins作业在后续步骤中创建的publishPar.properties属性文件。
创建了一个Jenkins作业来运行SoapUI项目。
将构建所需的参数设置为:
targetenv:构建的目标环境。 propertyFileName:在Git存储库中上载的属性文件名。 文件名:必须在IBM App Connect中发布的PAR文件名。 enableStart:True =发布PAR文件后开始编排。 False =部署PAR文件后不要开始业务流程。在Jenkins作业中,单击作业名称(对于本教程,该作业名称为CastIronDeployment_dev)。
点击配置 。
将打开“配置”窗口。 选择“ 源代码管理”选项卡,然后选择“ Git”单选按钮。 在“存储库URL”字段中,在Git中键入到存储库的链接。
单击生成选项卡。 要创建新属性,请运行图23中的以下shell脚本(第1-10行)。该脚本(Jenkins Shell Script.txt)可在本教程的下载部分中找到。
图24显示了运行时的组合属性文件。 注意,列出了开发和部署团队的两个属性。
图25显示了Jenkins Shell Script.txt Shell脚本(在下载部分中提供)。 您将在Build(第13-15行)下的部分中添加此脚本。
在“构建后操作”选项卡上,您将看到一个工件部分的存档。 文件系统中的工件PAR文件,属性文件和日志文件将被归档。 您可以通过{JENKINS_HOME}/jobs/{JENKINS_JOB_NAME}/builds/{JENKINS_JOB_NO.}/archive 。
本教程展示了IBM App Connect管理API如何提供一种灵活的方式来管理设备和业务流程。 IBM App Connect易于与DevOps工具集成,以促进部署自动化和配置交付管道。
翻译自: https://www.ibm.com/developerworks/opensource/library/d-app-connect-deployment-automation-jenkins-ci/index.html
相关资源:WAS自动部署技术总结