内容


使用管理 API 和 Jenkins 作为 IBM App Connect Professional 部署自动化的持续集成引擎

Comments

简介

在本教程中,您将了解在 IBM App Connect(前称为 WebSphere® Cast Iron®)上如何使用 IBM App Connect 管理 API、SoapUI 客户端和 Jenkins 实现部署自动化。

优势

部署自动化:

  • 完全自动部署 IBM App Connect 编排操作。
  • 通过 Cast Iron 管理控制台减少部署工作量并节省部署时间。
  • 自动执行部署可实现端到端的可跟踪性。
  • 实现部署活动的可跟踪性并提高部署质量,缩短应用和环境的宕机时间。

前提条件

要学习本教程,您需要安装以下程序并满足相应条件:

  • IBM App Connect 7.5.0 或更高版本
  • GitLabGitHub,这样就可以检入 PAR 和部署属性文件(此处使用了 GitLab 帐户)
  • SoapUI 5.2.1 或更高版本
  • 最新版本的 Jenkins
  • 掌握 DevOps 基础知识

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(如图 2a、2b 和 2c 中所示)。图 2a 显示了本步骤的第一个分步,即,将 WSDL 添加到项目中。右键单击 CastIron_Deployment 项目,并单击 Add WSDL

图 2a.将 WSDL 添加到项目中
已右键单击 CastIron_Deployment 项目,并选中了 Add WSDL
已右键单击 CastIron_Deployment 项目,并选中了 Add WSDL

这样会打开 Add WSDL 对话框。要添加安全性,请在 WSDL Location 文本框中输入(或浏览至)https://appliance-management-port/ws/security?wsdl,如图 2b 中所示。

图 2b.添加安全性 WSDL
Add WSDL 对话框
Add WSDL 对话框

您还要添加部署 WSDL。右键单击 CastIron_Deployment 项目,并单击 Add WSDL。这样会打开 Add WSDL 对话框。要添加部署,请在 WSDL Location 文本框中输入(或浏览至)https://appliance-management-port/ws/deployment?wsdl,如图 2c 中所示。

图 2c.添加部署 WSDL
Add WSDL 对话框
Add WSDL 对话框

第 3 步.创建一个测试案例

右键单击 CastIron_Deployment 项目,并选择 New TestSuite,如图 3a 中所示。

图 3a.添加新的 TestSuite
已选中 New TestSuite
已选中 New TestSuite

如前所述,右键单击 TestSuite1,并选择 New TestCase,如图 3b 中所示。

图 3b.添加一个测试案例
已选中 New TestCase
已选中 New TestCase

默认情况下,新的测试案例名为 TestCase1。右键单击 TestCase1 并选中 Rename,将其重命名为 PublishandStart,如图 3c 中所示。

图 3c.重命名一个测试案例
右键单击并重命名为 PublishandStart
右键单击并重命名为 PublishandStart
右键单击并重命名为 PublishandStart
右键单击并重命名为 PublishandStart

第 4 步.将 PAR 和属性文件上传至 GitLab

接下来,您需要将 PAR 文件和部署属性文件上传至 GitLab 帐户。属性文件具有 .properties 扩展名。属性文件在 Java™ 技术中主要用于存储应用的可配置参数。.properties 文件中的每一行通常会存储单个属性,采用键值对格式。图 4 显示了名为 publishPar.properties 并具有以下属性的部署属性文件:

  • projectName
  • version
  • config
  • FileName

应创建此文件并将其上传至 GitLab。

图 4.部署属性文件 (publishPar.properties)
projectName=#Generic Properties TestDatabase, version=2.0,                 config=Default, FileName=TestDatabase.par, #Generic Properties End
projectName=#Generic Properties TestDatabase, version=2.0, config=Default, FileName=TestDatabase.par, #Generic Properties End

第 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 请求
Test Steps > Add Step > SOAP Request
Test Steps > Add Step > SOAP Request

这样会打开 New TestRequest 窗口。从列表中选择 SecurityManagerPortBinding > login 选项,然后单击 OK,如图 6 中所示。

图 6.通过 SecurityManagerPortBinding -> login 选择登录设备 API 请求
New TestRequest:Select operation to invoke for request:SecurityManagerPortBinding -> login
New TestRequest:Select operation to invoke for request:SecurityManagerPortBinding -> login

<sec:username> </sec:username> 标签之间添加用户名。在 <sec:password> </sec:password> 标签之间添加密码,如图 7 中所示。单击 Save 以保存此项目。

图 7.LoginSOAPRequest
LoginSOAPRequest 用户名和密码
LoginSOAPRequest 用户名和密码

如果成功,此登录请求会生成 SessionId 用于用户认证。此 SessionId 会传递至其余步骤。

第 5b 步.在 SOAPUI 上附加可部署的 PAR 文件

右键单击 Test Steps,然后单击 Add Step。选择 Groovy Script,如图 8 中所示。此脚本会在 SoapUI 中从指定位置上传 PAR 文件。此脚本使用您上传至 GitLab 的部署属性文件,如图 4 中所示。

图 8.添加 Groovy 脚本
Test Steps > Add Step > Groovy Script
Test Steps > Add Step > Groovy Script

将以下脚本复制并粘贴到 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,然后将其传入第 5d、5e 和 5f 步中。

右键单击 Test Steps,选择 Add Step,然后选择 Property Transfer,如图 9 中所示。这样会将登录响应的 SessionId 传输至所有其他测试步骤。

XPATH 查询可通过请求将 SessionId 从登录响应传输至发布(第 4d 步)、启动(第 4e 步)和注销(第 4f 步)步骤。

下图显示了如何将 SessionId 从登录步骤传递至注销步骤(如图 11a 中所示)。同样,还显示了如何将 SessionId 传输至发布步骤(如图 11b 中所示)和启动编排步骤(如图 11c 中所示)。

图 9.添加步骤:属性传输
Test Steps > Add Step > Property Transfer
Test Steps > Add Step > Property Transfer

单击 + 图标(在图 10 中以红色突出显示)来添加属性传输。这样会打开一个对话框。在 Specify name for value transfer 文本框中输入名称 transferSessionId。此步骤将重复三次,如图 11a、11b、11c 中所示。

图 10.在属性传输步骤中添加传输内容
Property Transfer > Add Transfer:传输的值的名称                 transferSessionId
Property Transfer > Add Transfer:传输的值的名称 transferSessionId
图 11a.用于将 SessionID 从登录步骤传输到注销步骤的属性传输 XPATH 查询
Property Transfer Target: LogoutSOAPRequest,Property: Request,Path Language: XPath
Property Transfer Target: LogoutSOAPRequest,Property: Request,Path Language: XPath
图 11b.用于将 SessionID 从登录步骤传输到 PublishSOAPRequest 步骤的属性传输 XPATH 查询
Property Transfer Target: PublishSOAPRequest,Property: Request,Path Language: XPath
Property Transfer Target: PublishSOAPRequest,Property: Request,Path Language: XPath
图 11c.用于将 SessionID 从登录步骤传输到 StartRequest 步骤的属性传输 XPATH 查询
Property Transfer Target: StartRequest,Property: Request,Path Language: XPath
Property Transfer Target: StartRequest,Property: Request,Path Language: XPath

第 5d 步.发布 PAR 文件

要发布 PAR 文件,首先需要添加一个测试步骤作为 SOAP 请求,如图 5 中所示。打开 New TestRequest 窗口后,从列表中选择 DeploymentManagerPortBinding > publishProject,如图 12 中所示。

图 12.发布请求
NewTestRequest DeploymentManagerPortBinding ->publishProject
NewTestRequest DeploymentManagerPortBinding ->publishProject

图 13 中显示了 PublishSOAPRequest。

图 13.PublishSOAPRequest
PublishSOAPRequest
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.启动请求
NewTestRequest:DeploymentManagerPortBinding ->start
NewTestRequest:DeploymentManagerPortBinding ->start

图 15 显示了针对启动编排操作的管理 API 调用。

图 15.启动编排操作的 SOAP 请求
StartRequest ManagementAPI 调用
StartRequest ManagementAPI 调用

第 5f 步.从当前会话注销

右键单击 Test Steps,并添加新测试步骤作为 SOAP 请求,如图 5 中所示。选择 SecurityManagerPortBinding > logout 请求,如图 16 中所示。

图 16.注销请求
NewTestRequest SecurityManagerPortBinding ->logout
NewTestRequest SecurityManagerPortBinding ->logout

图 17 显示了 LogoutSOAPRequest 对话框。

图 17.SOAP 注销请求
LogoutSOAPRequest
LogoutSOAPRequest

图 18 显示了包含七个测试步骤的最终测试套件配置:

  • LoginSOAPRequest
  • UploadDataAfterCheck
  • Property Transfer
  • PublishSOAPRequest
  • SelectTestStep
  • StartRequest
  • LogoutSoapRequest
图 18.包含测试步骤的 SoapUI 项目导航器
Projects:TestCase1:Test Steps:突出显示的 StartRequest
Projects:TestCase1:Test Steps:突出显示的 StartRequest

第 6 步.导出包含测试套件的 SoapUI 项目

右键单击 SoapUI 项目,并单击 Save Project。提示输入文件名时,将测试套件命名为 CastIron-Deployment-soapui-project.xml,如图 19a 中所示。

图 19a.保存 SoapUI 项目
已选中 Save Project
已选中 Save Project

图 19b 显示了已上传至 GitLab 的 CastIron-Deployment-soapui-project.xml 文件。

图 19b.GitLab 上的 CastIron-Deployment-soapui-project.xml
GitLab 中的 CastIron-Deployment-soapui-project.xml 文件截屏
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 更改为包含属性文件
将 testrunner.sh 更改为包含属性文件
将 testrunner.sh 更改为包含属性文件

第 2 步.配置 Jenkins 作业以运行 SoapUI 项目

将创建 Jenkins 作业来运行 SoapUI 项目。

第 2a 步.输入部署属性

设置构建所需参数:

  • targetenv:构建的目标环境。
  • propertyFileName:上传至 Git 存储库中的属性文件名。
  • Filename:必须在 IBM App Connect 中发布的 PAR 文件名。
  • enableStart:True = 发布 PAR 文件后启动编排操作。False = 部署 PAR 文件后不启动编排操作。
图 21.必需参数
Jenkins 构建参数
Jenkins 构建参数

第 2b 步.从 GitLab 下载 PAR 文件和属性文件

在 Jenkins 作业中,单击作业名称(对于此教程,作业名称为 CastIronDeployment_dev)。

图 22a.单击 Jenkins 作业名称
Jenkins 中的 CastIronJobs,已选中 CastIronDeployment_dev
Jenkins 中的 CastIronJobs,已选中 CastIronDeployment_dev

单击 Configure

图 22b.Jenkins 项目 CastIronDeployment_dev 作业
已选中 Configure 的 Jenkins 屏幕
已选中 Configure 的 Jenkins 屏幕

这样会打开配置窗口。选择 Source Code Management 选项卡,然后选择 Git 单选按钮。在 Repository URL 字段中,输入指向 Git 中的存储库的链接。

图 22c.将 SCM 设置为 GitLab
将 Source Code Management 设置为 GitLab URL 和凭证
将 Source Code Management 设置为 GitLab URL 和凭证

第 2c 步.创建一个属性文件,用于在运行时将部署属性与基本属性文件组合在一起

单击 Build 选项卡。要创建新属性,请运行以下图 23 中的 shell 脚本(第 1 - 10 行)。本教程的下载部分提供了此脚本 (Jenkins Shell Script.txt)。

图 23.使用 Jenkins 脚本创建一个属性文件
Jenkins 脚本 Jenkins Shell Script.txt
Jenkins 脚本 Jenkins Shell Script.txt

图 24 显示了在运行时合并的属性文件。请注意,按开发团队和部署团队列出了这些属性。

图 24.合并的属性文件
合并的属性文件,包含按开发团队和部署团队列出的属性
合并的属性文件,包含按开发团队和部署团队列出的属性

第 2d 步.使用 shell 脚本运行 SoapUI 测试套件

图 25 显示了 Jenkins Shell Script.txt shell 脚本(在下载部分中提供)。您将在 Build 下的部分中添加此脚本(第 13 - 15 行)。

图 25.运行 shell 脚本
执行 shell 脚本
执行 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 工具轻松集成,促进实现部署自动化,并可配置交付渠道。

本教程中使用的文件


下载资源


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=DevOps, Open source
ArticleID=1059102
ArticleTitle=使用管理 API 和 Jenkins 作为 IBM App Connect Professional 部署自动化的持续集成引擎
publish-date=03142018