第3节、Jenkins使用技巧常用

一、正确实现并测试一个Jenkins脚本的步骤

原则:将脚本中的命令分布测试通过后再一起合成。

1、将一行行命令单独在终端中操作,验证是否通过;

2、整理到.sh/.py中,通过终端验证;

3、放到 Jenkins 的shell脚本中,构建验证;

3.1、现在本地验证后,再托管到服务器上;

在本地通过cd 脚本绝对路径sh 脚本.sh,构建验证;

3.2、本地验证后,使用 git/SVN 管理源码

二、源码托管

问:Jenkins中的项目一般都是托管在 Git/SVN 上,如果你想要在本地尝试呢?如何操作?

答:源码管理选择None。然后直接在Jenkins中的脚本里cd到执行路径,再操作即可。

DBSQL

Mac终端查看sqlite3数据库、表数据等(含sqlite可视化工具下载)

地址:https://xclient.info/s/navicat-premium.html#versions

navicat for mysql 只适用于 mysql ,navicat Premium 是全系列的。

Navicat Premium是一套数据库管理工具,结合了其它Navicat成员的功能,支持单一程序同时连接到MySQL、MariaDB、SQL Server、SQLite、Oracle和PostgreSQL数据库。Navicat Premium可满足现今数据库管理系统的使用功能,包括存储过程、事件、触发器、函数、视图等。
Navicat for MySQL是一套管理和开发MySQL或MariaDB的理想解决方案,支持单一程序,可同时连接到MySQL和MariaDB。这个功能齐备的前端软件为数据库管理、开发和维护提供了直观而强大的图形界面,给MySQL或MariaDB新手以及专业人士提供了一组全面的工具。

Markdown基础语法

[TOC]

参考文章:

锚点

详情查看:附一:StateEasyPage.js 与 StateNormalPage.js

折叠

1、语法代码:

基础语法:

1
2
3
4
<details>
<summary>测试的简要标题</summary>
测试的详细内容
</details>

加工语法:

1
2
3
4
5
6
7
8
<details>
<summary><mark><font color=darkred>点击查看详细内容</font></mark></summary>
<p> - 测试 测试测试</p>
<pre><code>
for i in a:
print(i)
</code></pre>
</details>

2、上述语法代码效果展示

  • 代码块1的效果


  • 测试的简要标题
    测试的详细内容
  • 代码块2的效果


  • 点击查看详细内容

    - 测试 测试测试



    for i in a:
    print(i)

3、自己常用

附一:StateEasyPage.js 与 StateNormalPage.js

开发工具的安全性保障

[toc]

项目安全

一、开发工具

附:《开发工具.md

开发工具安全性处理

1、(基础)入口隐蔽

2、(进阶)设置密码:build号(2011021000 即20年 11.02 10:00),并允许后台强制修改密码

3、(保障)升级时候,缓存的显示开发工具按钮失效:缓存的key,增加版本号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// 悬浮按钮 DevToolManager
String _app_drag_floating_button_key = "_app_drag_floating_button_should_show_${version}" // 当前版本悬浮按钮显示态
bool showFloatingDevButton = await SharedPreferences.getInstance().getBool(_app_drag_floating_button_key);


// 开发工具入口按钮 DevEntranceView
buildUI() {
bool _findEnterUI = false; // 页面全局变量,是否发现了入口

bool needAuth = !productEnv;
if (!needAuth) {
return 直接显示入口,且入口为"定制开发工具按钮",点击可直接进入开发工具页面
}

if (_findEnterUI) {
return "验证码输入框+进入页面的按钮"
}

// 提供一个隐藏区域,供用户长按来显示入口
return GestureDetector(onLongPress:() {
_findEnterUI = true;
});
}

getPd() async {
GlobalOtherConfig? otherConfigModel = GlobalConfig.otherConfig();
if (otherConfigModel != null && otherConfigModel.toolPasd != null && otherConfigModel.toolPasd!.isNotEmpty) {
_password = otherConfigModel.toolPasd;
} else {
PackageInfo packageInfo = await PackageInfo.fromPlatform();
_password = packageInfo.buildNumber;
}
}

End

混编事项说明

[toc]

混编事项说明

一、事项简述

混编

二、混编工程搭建

1、项目本身重构,实现原生混编前提—原生包Flutter

Flutter项目降级成模块,作为原生部分。

  • 抽离原生部分,Flutter项目降级成模块:原生项目外移,与Flutter项目同层。
  • 修改原生模块依赖配置文件Podfile,引入降级后的Flutter模块。

2、引擎处理

目的:混合栈引擎共享

方案一:使用flutter_boost

  • flutter_boost 接入

3、验证接入效果

3.1、验证跳转

三、混编下缓存数据共享

1、Flutter下的SharedPreferences

2、iOS下的UserDefaults

3、Android下的sharedPreferences

四、混编下的路由跳转

1、Flutter下的 fluro

2、iOS下的 CTMediator

3、Android下的 ARouter

1、原生路由实现

2、Flutter路由和原生路由的交互跳转

五、混编下的打包

1、混编下的打包环境变量的修改

六、生命周期修改

原因: Flutter 的 WidgetsBindingObserver RouteAware 失效,必须使用混编下(如FlutterBoost)的生命周期,很多业务需要重新修改确认。

七、混编下的图片资源共享

核心:各平台图片库的图片存储和获取位置自定义

1、Flutter下的 extended_image

2、iOS下的 SDWebImage

3、Android下的 glide

八、组件

1、网络数据共享

1、Flutter上的 dio

2、iOS上 Swift 的 AlamofireOC 的 AFNetworking

3、Android上的 OkHttp

Android主流网络请求开源库的对比(Android-Async-Http、Volley、OkHttp、Retrofit)

网络的重试、缓存

2、图片库

见上文《图片资源共享》部分

3、其他三方库

火山、buglgy、地图等 — 不用重新做

4、UI基础组件

5、开发工具

5.1、日志系统

自定义的监控系统

九、桥接—-Flutter方法

End