练习:与Jenkins结合实现软件项目迁移持续集成
发表于 2023/04/27
0
尊敬的鲲鹏开发者你好,为了提高开发者在软件迁移过程中的开发效率,我们提供了Porting Advisor的Jenkins迁移扫描插件,帮助开发者对软件项目迁移集成化,更快更方便的实现跨平台软件的迁移,您可以阅读本文进行Jenkins迁移扫描插件的快速入门。
本文主要介绍了以下知识:
(1)为何要进行CI集成
(2)如何使用Porting Advisor的Jenkins迁移扫描插件实现软件项目迁移CI持续集成
基础技能:
(1)具备基础的C/C++语言编程能力
(2)了解常用的Linux操作命令
(3)了解CICD,Jenkins基础操作
为何要进行CI集成
处理器所支持的指令集不同,意味着开发者可能需要对代码进行跨平台的迁移。通常,代码迁移是件复杂又繁琐的工作,需要花费开发者大量精力对软件包、源代码、依赖库文件进行人工分析、检查和识别,手动修正不同指令集之间的相关差异,这些差异主要涉及语法、指令、函数和库文件支持情况。
为了解决用户代码可迁移性人工排查困难、移植经验欠缺、反复依赖编译调错定位等,投入工作量大,整体效率低的问题,Porting Advisor通过对海量代码进行快速地自动化扫描和分析,提供专业的迁移指导报告。Jenkins是一种持续集成工具,用于监控持续重复工作,Porting Advisor与Jenkins结合,即可实现工程首次配置,后续持续集成扫描,能帮助开发者实现自动化且持续性的源码迁移评估。
如何使用Porting Advisor的Jenkins迁移扫描插件实现软件项目迁移CI持续集成准备工作
(1)准备工作
步骤一:申请鲲鹏远程实验室资源
步骤二:远程服务器环境登录
步骤三:Jenkins服务启动
步骤四:工具包获取
步骤五:源码迁移扫描文件准备
步骤六:软件迁移评估扫描文件准备
(2)Jenkins工程配置
Agent管理
Jenkins迁移扫描插件安装
Jenkins凭据创建
(3)扫描任务创建
步骤一:创建pipline Project
步骤二:扫描任务配置
步骤三:扫描任务启动
1. 准备工作
步骤一:申请鲲鹏远程实验室资源
接下来的体验过程我们会在鲲鹏远程实验室资源上进行:
云开发服务提供了在线IDE,用户申请完可以直接在页面打开在线IDE进行代码迁移、开发调试、编译、调优及诊断等功能。
云测试服务面向开发者提供基于鲲鹏云环境兼容性测试、可靠性测试、安全测试、功能测试和性能测试服务,帮助开发者快速发现和定位应用软件运行在鲲鹏环境的问题。
远程服务器预装“一站式”开发套件,包括鲲鹏代码迁移工具(含鲲鹏原生开发框架和调试器)、鲲鹏编译工具链、鲲鹏性能分析工具,动态二进制翻译工具(ExaGear)。开发者可远程便捷SSH登录,灵活使用。
Jenkins需要启动服务后在web页面中使用,无需使用在线IDE模式,所以使用远程服务器 (黑框模式)。开发者在申请远程服务器后可以直接通过MobaXterm/Xshell访问远程服务器,启动Jenkins服务,再通过本地浏览器访问web页面进行操作,降低了开发者在鲲鹏上的迁移评估门槛。
鲲鹏社区的远程实验室页面https://www.hikunpeng.com/zh/developer/cloud-lab,点击“立即申请”后进入申请页面,在远程服务器的“立即申请”按钮申请:
之后输入自己的邮箱地址,选择openEuler 20.03 LTS-SP1(以实际可选的为准)系统,申请成功后,鲲鹏社区将环境信息发送到您填写的邮箱地址。
步骤二:远程服务器环境登录
下载并安装Uni VPN Client 客户端,下载地址见:http://www.leagsoft.com/doc/article/103107.html
双击客户端“Uni VPN”快捷方式,点击“新建连接”,选择“导入配置”,配置文件见鲲鹏社区发送的邮件中文件名为“xxx.xxx.xxx.xxx.ini”的附件。
导入完成后,点击“连接”按钮,然后输入“用户名”和“密码”,然后点击“登录”按钮,VPN用户信息见鲲鹏社区发送的邮件正文中“VPN用户名”和“VPN密码”。
可使用XShell/MobaXterm工具,输入IP地址和用户名,可远程登录服务器,“远端主机”和“用户名”见鲲鹏社区发送的邮件正文中“服务器弹性IP”和“SSH用户名”。
步骤三:Jenkins服务启动
登录远程登录服务器后开始操作:
确保8080端口防火墙开启, 请执行以下命令开启:
firewall-cmd --zone=public --add-port=8080/tcp --permanent
systemctl restart firewalld
firewall-cmd --list-ports
防火墙开启成功如下图所示:
当前环境已在/opt/cmd目录预置2.387.2版本jenkins.war,启动jenkins服务:
cd /opt/cmd; java -jar jenkins.war --httpPort=8080
FAQ:
在后续使用时,因网络中断或长时间未使用等原因可能会出现jenkins服务断连的问题,需要重新登录远程服务器后重启服务。以下为可能遇到的两种问题,可参考解决:
(1) Network error: Software caused connection abort
原因:网络原因导致远程服务器连接中断
处理方法:
重新使用XShell/MobaXterm登录远程服务器,启动jenkins服务:
cd /opt/cmd; java -jar jenkins.war --httpPort=8080
(2) Failed to start Jetty
原因:8080端口被占用
处理方法:
查询当前占用8080端口的进程并关闭,重启jenkins服务:
ps -ef | grep jenkins
kill -9 ****** //请替换为占用8080端口的实际进程id
cd /opt/cmd; java -jar jenkins.war --httpPort=8080
进程id获取示例:
启动Jenkins服务成功后,得到如下图所示信息:
复制密码信息,在本地用户桌面打开浏览器,访问jenkins服务:http://hostIP:8080(hostIP即为远程实验室资源服务器弹性IP,可以从邮件中获取)
输入密码后,点击继续。选择安装推荐的插件:此步骤为Jenkins官方推荐的基础服务插件安装,方便后续使用。
完成后创建管理员用户,后续可通过该账户进行Jenkins管理。使用admin账户继续。
完成后,可以访问到下图所示服务页面,保存并完成。
可得到如下所示页面,jenkins服务启动成功且配置完成。
步骤四:工具包获取
Porting Advisor插件配置所需软件包如下表所示:
鲲鹏远程服务器资源为arm架构,已在/opt/目录预置安装DevKit工具,无需用户手动上传,仅需获取porting-advisor-plugin.hpi存放用户本地目录即可。
获取Porting Advisor相关软件包:
软件包名称 | 软件包说明 | 获取方法 | 备注 | 存放路径 |
---|---|---|---|---|
porting-advisor-plugin.hpi | PortingAdvisorJenkins插件 | 需要下载到用户本地目录,后续体验环节需要使用 | 用户本地目录 |
步骤五:源码迁移待扫描文件准备
本文以smartdenovo作为迁移扫描示例,当前代码文件已预置在远程服务器/opt/DevKit/workspace/devadmin/porting/sourcecode/smartdenovo-master目录。smartdenovo是一个同时适用于pacbio和nanopore测序数据的denovo组装软件,它是一款基于C语言开发的开源软件。
步骤六:软件迁移评估待扫描文件准备
以CMake作为迁移扫描示例,当前软件包已预置在远程服务器/opt/DevKit/workspace/devadmin/porting/package/cmake-3.19.8-Linux-x86_64.tar.gz目录。CMake是一个开源、跨平台的工具系列,旨在于构建、测试和打包软件。
2.Jenkins工程配置
(1)Agent管理
说明:构建使用的机器可以通过Jenkins进行管理,统称为node,可在构建中通过label进行调用。此步骤是将jenkins运行的服务器同时配置为node,以供后续工程使用。
操作步骤
步骤 1 Jenkins首页左侧导航栏点击 构建执行状态。
步骤 2 点击New Node进行节点新增。
创建Node
填写Node详细信息,如下图所示:
执行机状态和标签显示正确则配置完成。
步骤3:登陆远程服务器,修改slave节点ip地址
cd ~ # 回到root目录
ssh-keygen # 三次回车
ssh xxx.xxx.xxx.xxx # Slave节点机的ip地址
cd .ssh/
chmod 700 known_hosts
(2)Jenkins迁移扫描插件安装
本文使用Jenkins 2.387.2版本和porting-advisor-plugin.hpi 1.0.0版本进行演示,不同版本Jenkins部分描述可能略有差异。
进入Jenkins服务页面,单击“Dashboard”,在左侧导航页面选择“系统管理”进入“Manage Jenkins”页面,在“系统配置”部分单击“插件管理”,进入“Plugin Manager”页面,如下图所示 :
在左侧导航页面选择“Advanced settings”进入高级设置页面。在“Deploy Plugin”部分单击选择,选择本地已获取的hpi类型插件包进行上传。插件包上传后单击“Deploy”完成插件安装,如下图所示。
安装HTML报告展示插件(HTML Publisher plugin),确保网络连通且插件源可用,然后在“Available plugins”页面搜索框中搜索插件名称,勾选后点单击“Install without restart”,如下图所示:
(3)Jenkins凭据创建
操作步骤
步骤一:进入Jenkins服务页面,在左侧导航栏页面单击“Manage Jenkins”,进入jenkins工程管理页面,选择“Credentials”,进入后点击“全局”,进入Credentials管理页面,如下图所示。单击“Add Credentials”添加新的凭据。
步骤二:填写账号及密码信息,添加新的凭据,当前Jenkins对应代码迁移工具23.0.T10。
步骤三:添加凭据后,返回“Credentials”页面,其中ID即为token值,请记录该值以便后续工程中配置使用。
(4)获取机器IP
ssh登陆远程实验室资源服务器弹性IP,执行以下命令查询私有IP地址,如下图所示。
ifconfig
在工程创建过程中使用该IP。
3.源码扫描任务参数说明
源码扫描参数说明如下表格所示:
参数名称 | 默认值 | 描述 |
---|---|---|
serviceType | webserver | 采用web模式调度PortingAdvisor工具 |
service | sourceCheck | 源码扫描功能 |
webserverIp | - | PortingAdvisor工具安装时配置的Web Server IP地址(备注:远程实验室资源服务器本机IP,参考“获取机器IP”章节) |
webserverPort | 8087 | PortingAdvisor工具安装时配置的HTTPS端口 |
scanpath | - | 必选参数。 待扫描的文件或路径: 路径使用全路径。 可以输入多个路径,用“,”隔开。预置路径:/opt/DevKit/workspace/devadmin/porting/sourcecode/smartdenovo-master。 用户上传源码路径:/opt/DevKit/workspace/devadmin/porting/sourcecode/ |
targetos | openeuler20.03 | 必选参数。软件需要迁移的Target Linux OS的名称和版本。 可选择以下操作系统:"centos7.6", "neokylinv7u5", "neokylinv7u6", "deepinv15.2", "ubuntu18.04.x", "linxos6.0.90","debian10", "susesles15.1", "euleros2.8", "centos7.4", "centos7.5", "centos7.7", "openeuler20.03", "openeuler22.03", "openeuler20.03sp1", "openeuler20.03sp2", "openeuler20.03sp3", "centos8.0", "centos8.1", "centos8.2", "uos20sp1", "kylinv10sp1", "kylinv10sp2", "ubuntu20.04.x", "uoseuler20","uos20-1020e", "bclinux7.6", "bclinux7.7", "isoft5.1", "openeuler22.03sp1", "uos20-1050e","kylinsecos3.4" |
targetkernel | 5.10.0 | 按照targetos填写对应targetkernel版本,对应关系如下: BC-Linux 7.6支持4.19.25 BC-Linux 7.7支持4.19.25 CentOS 7.4支持4.11.0 |
constructtools | make | 扫描代码为解释型语言时,可以为空。可选择以下构建工具:make、cmake、automake、go |
cmd | make | 扫描代码为解释型语言时,可以为空。 编译命令需根据构建工具配置文件确定。 |
gfortran | - | 提供Fortran编译版本。 GFORTRAN 7/8/9 FLANG 2.1.0/2.3.0/2.4.0/2.5.0/2.5.0.1 |
interpreted | true | 显示是否进行interpreted扫描。 |
customizedmacros | - | 自定义x86宏 输入自定义宏时,多个宏之间请用分号“;”进行分隔。 |
4.软件包扫描任务参数说明
软件包扫描参数说明如下表格所示:
参数名称 | 默认值 | 描述 |
---|---|---|
serviceType | webserver | 采用web模式调度PortingAdvisor工具 |
service | binaryCheck | 软件包扫描功能 |
webserverIp | - | PortingAdvisor工具安装时配置的Web Server IP地址(备注:远程实验室资源服务器本机IP,参考“获取机器IP”章节) |
webserverPort | 8087 | PortingAdvisor工具安装时配置的HTTPS端口 |
scanpath | - | 必选参数 待扫描的路径: 路径需使用绝对路径。 预置路径:/opt/DevKit/workspace/devadmin/porting/package/cmake-3.19.8-Linux-86_64.tar.gz, 用户上传软件包路径:/opt/DevKit/workspace/devadmin/porting/ package / 说明: 支持使用通配符“*”,输入包含通配符“*”时必须添加双引号。 当输入内容中不包含具体文件名,仅为路径时,工具将扫描路径下的所有的RPM、JAR、DEB、TAR、ZIP、GZIP、WAR和EAR文件。 |
instpath | - | 软件已安装路径。 PortingAdvisor服务在x86环境安装时可用。 |
targetos | - | 可选参数。软件需要迁移的Target Linux OS的名称和版本。 可选择以下操作系统: "centos7.6", "neokylinv7u5", "neokylinv7u6", "deepinv15.2", "ubuntu18.04.x", "linxos6.0.90","debian10", "susesles15.1", "euleros2.8", "centos7.4", "centos7.5", "centos7.7", "openeuler20.03", "openeuler22.03", "openeuler20.03sp1", "openeuler20.03sp2", "openeuler20.03sp3", "centos8.0", "centos8.1", "centos8.2", "uos20sp1", "kylinv10sp1", "kylinv10sp2", "ubuntu20.04.x", "uoseuler20","uos20-1020e", "bclinux7.6", "bclinux7.7", "isoft5.1", "openeuler22.03sp1", "uos20-1050e","kylinsecos3.4" |
targetkernel | 5.10.0 | 按照targetos填写对应targetkernel版本,对应关系如下: BC-Linux 7.6支持4.19.25 BC-Linux 7.7支持4.19.25 CentOS 7.4支持4.11.0 |
5. 工程任务创建
步骤一:创建pipeline Project
进入Jenkins服务页面,在左侧导航栏页面单击“新建任务”,进入工程创建页面。
如下图所示,在工程创建页面输入“testproject”并选择工程类型为“流水线”,单击“OK”跳转至Configure。
步骤二:扫描任务配置
完成script编写后填入此处并保存。
说明:Pipeline script使用模板配置,可从Jenkinsfile文件中获取了Pipeline script模板。详细模板信息如下,其中step内容是需要根据不同工程进行适配修改,可参考具体任务参数说明:
pipeline {
agent none
options {
buildDiscarder(logRotator(numToKeepStr: '20'))
}
stages {
stage('PortingPlugin Executing') {
matrix {
axes {
axis {
name 'PLATFORM'
// 目标slave
values 'slave-1'
}
}
agent { label "${PLATFORM}" }
options {
timeout(time: 1, unit: 'HOURS')
}
stages {
stage('PortingPlugin Executing') {
environment {
// 引入执行用户凭据(必须提前在Jenkins管理中配置)
BITBUCKET_COMMON_CREDS = credentials('c25114ad-be8e-4fe4-915d-a73c15275b94')
}
steps {
// 运行插件
step([$class: 'PortingAdvisorBuilder',
serviceType: "webserver",
service: "sourceCheck",
webserverIp: "XXX.XXX.XXX.XXX",
webserverPort: "8087",
command: "",
prefix: "",
scantype: "",
scanpath: "/opt/DevKit/workspace/devadmin/porting/sourcecode/smartdenovo-master",
instpath: "",
compiler: "",
cmd: "make",
targetos: "openeuler22.03",
targetkernel: "5.10.0",
extendedparameter: "",
hardwareArchitecture: "",
constructtool: "make",
enableSVE: "true",
compilerType: "clang",
osMappingDir: "",
gllvm: "true",
autoFix: "true",
gfortran: "",
customizedmacros: "",
compilecommand: "make",
interpreted: true,
sourceenhancecheck: false,
username: "$BITBUCKET_COMMON_CREDS_USR",
password: "$BITBUCKET_COMMON_CREDS_PSW"
])
}
post {
always {
// 测试报告(模板)
// junit('**/build/test-results/**/*.xml')
// web测试报告(模板)
publishHTML (target: [
allowMissing: false,
alwaysLinkToLastBuild: false,
keepAll: true,
reportDir: '.',
reportFiles: '*.html',
reportName: "Porting Report"
])
}
}
}
}
}
}
}
}
Pipeline script模板配置关键操作步骤:
a.根据实际环境信息对agent label进行修改。
b.获取创建的用户凭据(可参考‘Jenkins凭据创建’章节),并填写到Jenkinsfile中。
c.选择需要使用的功能,对模板参数进行修改(对应扫描功能不涉及的参数,请保持其默认值切勿删除),完成script编写后,将内容复制粘贴至工程pipeline scripts文本框中,点击Save按钮,完成配置。
步骤三:扫描任务启动
在扫描任务左侧“Status”页面下单击“立即构建”启动任务。
工程第一次执行时,工具安装部署花费大约1min,扫描时间根据代码量会有差异,请耐心等待。
当最新一次构建任务状态为绿色时,表示扫描任务已完成。
单击“Build History”部分最新一次构建任务数字,跳转后在左侧导航栏点击“Console Output”即可查看构建过程日志。
6. 扫描报告查看
构建任务成功执行完成后,单击工程页面左侧导航栏“Porting Report”,即可查看扫描结果。
通过切换顶部页签查看不同扫描任务报告。
如果报告格式异常,在jenkins主页面,单击“系统管理”,选择“脚本命令行”。
跳转至“Script Console”页面,在输入框中输入脚本。
参考脚本如下:
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "script-src 'unsafe-inline'")
点击运行,完成适配。
恭喜
到这里整个实验流程就已经结束了,通过上面的软件迁移扫描动作我们拿到了软件迁移评估报告,完成Jenkins集成Porting Advisor插件实现代码迁移。
除了上述学习内容,我们还提供了很多辅助学习资源(课程/实验/文档/文章),希望能帮助到您更好的使用鲲鹏DevKit迁移工具:
鲲鹏代码迁移工具介绍(课程):
https://www.hikunpeng.com/learn/courses-list/detail/1590560841222623234
手把手带你使用代码迁移工具实现源码迁移(课程):
https://www.hikunpeng.com/learn/courses-list/detail/1556841082254745602鲲鹏代码迁移工具-快速入门(文档):
https://www.hikunpeng.com/document/detail/zh/kunpengdevps/porting/qs/qs-pa-kunpengdevps.html本页内容