You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何用CODESYS Scripting Engine实现项目构建部署自动化并集成Jenkins

CODESYS脚本实现应用构建、控制台输出捕获及Jenkins自动化流水线搭建

一、实现应用构建并输出UI一致的控制台信息

要实现和CODESYS UI一致的构建输出,需调用构建API并捕获构建过程的消息流,以下是可直接运行的示例脚本:

# encoding:utf-8
from __future__ import print_function

print("--- Starting project build ---")

# 获取当前打开的主项目
proj = projects.primary

# 获取目标构建配置(示例为默认"Standard"配置,可根据项目实际修改)
build_configs = proj.get_build_configurations()
target_config = next(config for config in build_configs if config.get_name() == "Standard")

# 清除历史消息,避免干扰本次构建输出
messages.clear()

# 执行构建操作
build_result = proj.build(target_config)

# 输出与UI控制台一致的构建消息
print("\n--- Build Console Output ---")
for msg in messages.get_all():
    # 模拟UI的消息类型标记
    msg_type = "[INFO]"
    if msg.is_error:
        msg_type = "[ERROR]"
    elif msg.is_warning:
        msg_type = "[WARNING]"
    print(f"{msg_type} {msg.get_text()}")

# 输出最终构建结果
print(f"\n--- Build Result: {'SUCCESS' if build_result else 'FAILED'} ---")

核心要点:

  • projects.primary.build():接受构建配置对象作为参数,触发项目完整构建流程
  • messages.get_all():获取构建过程中产生的所有消息(错误、警告、信息),完全匹配UI控制台输出内容
  • 通过is_error/is_warning属性区分消息类型,模拟UI的视觉标记逻辑

二、Jenkins流水线集成

将CODESYS自动化脚本嵌入Jenkins流水线,需通过CODESYS命令行工具执行脚本,示例Jenkinsfile片段:

pipeline {
    agent any
    stages {
        stage('Checkout Project') {
            steps {
                // 拉取CODESYS项目代码
                git url: 'your-project-repo-url', branch: 'main'
            }
        }
        stage('Build CODESYS Project') {
            steps {
                // Windows环境调用CODESYS命令行执行构建脚本
                bat '''
                    "C:\\Program Files\\CODESYS 3.5.19.0\\CODESYS.exe" --runscript "build_project.py" --project "YourProject.project" --close
                '''
                // Linux环境替换为以下命令
                // sh '/opt/codesys/CODESYS --runscript build_project.py --project YourProject.project --close'
            }
        }
        stage('Run Automated Tests') {
            steps {
                // 执行测试自动化脚本
                bat '''
                    "C:\\Program Files\\CODESYS 3.5.19.0\\CODESYS.exe" --runscript "run_tests.py" --project "YourProject.project" --close
                '''
            }
            post {
                always {
                    // 发布JUnit格式测试报告(需提前安装Jenkins JUnit插件)
                    junit 'test-results.xml'
                }
            }
        }
    }
}

命令行参数说明:

  • --runscript:指定要执行的Python脚本路径
  • --project:指定目标CODESYS项目文件路径
  • --close:脚本执行完成后自动关闭CODESYS程序

三、项目测试自动化

利用CODESYS Test Manager的脚本API,可自动执行测试用例并导出适配Jenkins的测试结果,示例脚本:

# encoding:utf-8
from __future__ import print_function
import xml.etree.ElementTree as ET
from xml.dom import minidom

print("--- Starting test execution ---")

# 获取Test Manager实例
test_manager = testmanager.get_instance()

# 执行所有测试用例
test_manager.run_all()

# 导出JUnit格式测试结果,用于Jenkins展示
root = ET.Element("testsuite")
root.set("name", "CODESYS Project Tests")
root.set("tests", str(test_manager.get_test_case_count()))
root.set("failures", str(test_manager.get_failed_count()))
root.set("errors", str(test_manager.get_error_count()))

for test_case in test_manager.get_test_cases():
    tc_elem = ET.SubElement(root, "testcase")
    tc_elem.set("name", test_case.get_name())
    if not test_case.is_passed():
        failure = ET.SubElement(tc_elem, "failure")
        failure.set("message", test_case.get_result_message())

# 格式化XML并保存到本地
xml_str = minidom.parseString(ET.tostring(root)).toprettyxml(indent="  ")
with open("test-results.xml", "w") as f:
    f.write(xml_str)

print(f"\n--- Test Execution Finished: {test_manager.get_passed_count()}/{test_manager.get_test_case_count()} passed ---")

核心要点:

  • testmanager.get_instance():获取项目绑定的Test Manager对象
  • run_all():批量执行所有已配置的测试用例
  • 导出JUnit XML格式结果,可直接被Jenkins解析生成可视化测试报告

四、常见问题排查

  • 构建无输出:确保调用build()前执行messages.clear(),避免历史消息干扰;检查构建配置名称与项目实际配置一致
  • Jenkins执行无响应:确认CODESYS安装路径正确,且Jenkins服务账号有权限访问CODESYS程序及项目文件
  • 测试结果导出失败:确保项目已配置Test Manager测试用例,且脚本拥有本地文件写入权限

内容的提问来源于stack exchange,提问作者user24238761

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 22:37:05