鸿蒙构建中如何获取Jenkins传递的环境变量参数

在鸿蒙(HarmonyOS)应用开发中,我们常常需要与Jenkins这样的持续集成工具集成,以便自动化构建和部署我们的应用。一个常见的需求是在构建过程中获取Jenkins传递的环境变量参数,并将这些参数应用到我们的源代码中。本文将详细介绍如何在鸿蒙构建过程中获取并使用Jenkins的环境变量。

问题背景

在我的项目中,我们接入了Jenkins系统来自动化构建流程。为了更好地管理和调试,我们需要在构建过程中获取一些关键的环境变量,如构建号、是否为发布构建等,并在我们的应用代码中使用这些信息。例如,我们希望在应用中显示构建号,以便在测试时快速定位问题。

解决方案探索

最初,我了解到可以通过hvigorfile.ts文件中的process.env.xxx来获取传递的环境变量参数。然而,问题在于如何将这些参数传递到源代码中,特别是在BuildProfile中使用。

实施步骤

  1. 自定义Hvigor插件: 为了解决这个问题,我开始探索自定义Hvigor插件的可能性。Hvigor是鸿蒙的构建工具,它支持通过插件扩展其功能。我创建了一个自定义插件,用于在构建过程中注册新的任务,这些任务可以访问并处理环境变量。

    typescript 复制代码
    import { hvigor, HvigorNode, HvigorPlugin } from '@ohos/hvigor';
    import { appTasks, OhosHapContext, OhosAppContext, OhosPluginId, Target } from '@ohos/hvigor-ohos-plugin';
    
    export function customPlugin(): HvigorPlugin {
        return {
            pluginId: 'customPlugin',
            context() {
                return {
                    data: 'customPlugin xxx'
                };
            },
            async apply(currentNode: HvigorNode): Promise<void> {
                hvigor.nodesEvaluated(async () => {
                    hapTask(currentNode);
                });
            }
        };
    }
    
    function hapTask(currentNode: HvigorNode) {
        currentNode.subNodes((node: HvigorNode) => {
            const hapContext = node.getContext(OhosPluginId.OHOS_HAP_PLUGIN) as OhosHapContext;
            const moduleName = hapContext?.getModuleName();
            const appContext = currentNode.getContext(OhosPluginId.OHOS_APP_PLUGIN) as OhosAppContext;
            const buildMode = appContext?.getBuildMode();
            const currentProduct = appContext?.getCurrentProduct();
            hapContext?.targets((target: Target) => {
                const targetName = target.getTargetName();
                const outputPath = target.getBuildTargetOutputPath();
                node.getTaskByName(`${target.getTargetName()}@SignHap`)?.setEnable(false);
                node.registerTask({
                    name: `${targetName}@onlineSignHap`,
                    run() {
                        console.log('targetName:' + targetName + ', moduleName:' + moduleName + ', buildMode:' + buildMode + ', currentProduct:' + currentProduct.getProductName());
                    },
                    dependencies: [`${targetName}@PackageHap`],
                    postDependencies: ['assembleHap']
                });
            });
        });
    }
    
    export default {
        system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */
        plugins:[customPlugin()] /* Custom plugin to extend the functionality of Hvigor. */
    }
  2. 在模块或har中注册任务 : 在自定义的Hvigor插件中,我定义了一个名为hapTask的函数,它遍历所有子节点,并为每个目标注册一个新的任务。这个任务在运行时会输出相关的环境变量信息,从而可以在构建过程中被捕获并在代码中使用。

结果与反思

通过实施上述步骤,我成功地在鸿蒙构建过程中获取了Jenkins传递的环境变量,并将这些信息应用到了我们的应用代码中。这不仅提高了我们的构建流程的自动化程度,也使得问题定位和调试变得更加高效。

在未来的工作中,我计划进一步优化这个插件,使其更加通用和易于集成,同时也考虑增加更多的功能,如自动生成版本信息等,以进一步提升开发效率。

通过这次实践,我深刻体会到在技术开发中,理解和掌握底层工具和框架的能力是非常重要的。这不仅可以帮助我们解决具体的技术问题,还可以提升我们的技术视野和解决复杂问题的能力。

相关推荐
liulian091628 分钟前
Flutter 三方库 flutter_local_auth 的鸿蒙化适配指南
flutter·华为·学习方法·harmonyos
SuperHeroWu735 分钟前
【鸿蒙基础入门】概念理解和学习方法论说明
前端·学习·华为·开源·harmonyos·鸿蒙·移动端
亘元有量-流量变现1 小时前
抓住鸿蒙流量红利!2026华为应用商店ASO优化全解
华为·harmonyos·aso优化
特立独行的猫a2 小时前
使用 vcpkg 为OpenHarmony(鸿蒙PC)构建 OpenSSH 命令行工具
harmonyos·openharmony·命令行·openssh·vcpkg·鸿蒙pc
音视频牛哥2 小时前
纯血鸿蒙(HarmonyOS NEXT)下,如何实现低延迟RTSP、RTMP播放器音视频解码?
华为·音视频·harmonyos·鸿蒙rtmp播放器·鸿蒙rtsp播放器·harmonyos rtsp·鸿蒙next播放器
特立独行的猫a3 小时前
OpenSSH 介绍及使用Lycium框架移植到鸿蒙 PC(OpenHarmony)平台的实践总结
harmonyos·openssh·鸿蒙pc·lycium_plusplus·三分库移植
轻口味3 小时前
HarmonyOS 6 轻相机应用开发2:贴纸效果实现
音视频·harmonyos·鸿蒙·播放器
HwJack203 小时前
跨模块资源共享的破局之道:HarmonyOS HSP 资源访问“避坑与升华”指南
华为·harmonyos
liulian09164 小时前
【Flutter for OpenHarmony】原生卡片 Widget 集成实战:从零构建待办清单桌面组件
flutter·华为·学习方法·harmonyos
想你依然心痛4 小时前
HarmonyOS 6游戏开发实战:基于悬浮导航与沉浸光感的“光影迷宫“解谜游戏
游戏·华为·harmonyos·悬浮导航·沉浸光感