升级服务清单
以下服务或组件升级至 1.0.0.RELEASE
组件
- hzero-parent
- hzero-starter-parent
- hzero-boot-parent
- hzero-plugin-parent (op/saas)
- hzero-gateway-helper-api
- hzero-gateway-helper-default
- hzero-starter-social-parent
服务
- hzero-register
- hzero-config (op/saas)
- hzero-gateway
- hzero-asgard
- hzero-swagger
- hzero-oauth
- hzero-iam (op/saas)
- hzero-platform (op/saas)
- hzero-file (op/saas)
- hzero-message (op/saas)
- hzero-portal (op/saas)
- hzero-report (op/saas)
- hzero-scheduler (op/saas)
- hzero-import (op/saas)
- hzero-pay
- hzero-im
- hzero-nlp (op/saas)
- hzero-monitor (op/saas)
- hzero-transfer (saas)
- hzero-interface(op/saas)
- hzero-workflow-plus (op/saas)
服务/组件升级
-
修改 pom.xml,如果 parent 依赖的
hzero-parent
,需修改版本号为1.0.0.RELEASE
;如果是自建的 parent 项目,需将其中的 hzero 服务/组件的版本号修改为1.0.0.RELEASE
<parent> <groupId>org.hzero</groupId> <artifactId>hzero-parent</artifactId> <version>1.0.0.RELEASE</version> </parent>
-
修改依赖的服务版本号
<!-- SAAS 版本 --> <dependency> <groupId>org.hzero</groupId> <artifactId>hzero-xxx-saas</artifactId> <version>1.0.0.RELEASE</version> </dependency> <!-- OP 版本 --> <dependency> <groupId>org.hzero</groupId> <artifactId>hzero-xxx</artifactId> <version>1.0.0.RELEASE</version> </dependency>
重点配置调整
服务名称强制一致调整
自动刷新服务路由时,不再支持自动处理带后缀(如工号)的服务名,需保持配置文件中的服务名和 ExtraDataManager 中配置的服务名一致。
-
建议项目上,每个服务新建一个 ExtraDataManager 的实现类,使用配置的形式注入服务配置,便于开发人员本地开发。
@ChoerodonExtraData public class HiamExtraDataManager implements ExtraDataManager { @Autowired private org.springframework.core.env.Environment environment; @Override public ExtraData getData() { ChoerodonRouteData choerodonRouteData = new ChoerodonRouteData(); choerodonRouteData.setName(environment.getProperty("hzero.service.current.name", "hiam")); choerodonRouteData.setPath(environment.getProperty("hzero.service.current.path", "/iam/**")); choerodonRouteData.setServiceId(environment.getProperty("hzero.service.current.service-name", "hzero-iam")); choerodonRouteData.setPackages("org.hzero.iam"); extraData.put(ExtraData.ZUUL_ROUTE_DATA, choerodonRouteData); return extraData; } }
-
本地开发时,则可以在环境变量或本地配置文件中配置带后缀的服务名
hzero: service: current: name: hiam-16007 path: /iam-16007/** service-name: hzero-iam-16007
服务合并配置
如果有服务合并,需将 hzero.modular.enable
设置为 true
,且必须在 ExtraDataManager 配置中设置 ChoerodonRouteData 的 packages
参数,该参数指定要扫描的包,否则启动会报错。不需要服务合并,可以设置为 false,或者删除此配置。
hzero:
modular:
enable: false
hzero-oauth 配置调整
-
hzero-oauth 新增加了二级域名单点登录、SAML、密码加密的相关配置。
hzero: sso: # 启用二级域名单点登录 enabled: ${HZERO_OAUTH_SSO_ENABLED:false} service: # Cas 客户端地址 baseUrl: ${HZERO_OAUTH_SSO_SERVICE_BASE_URL:http://dev.hzero.org:8080/oauth} # SAML 相关配置 saml: entity_id: hzero:org:sp passphrase: secret private_key: MIIEvQIBADANB......... certificate: MIIDEzCCAfugA......... password: # 密码加密公钥 public-key: ${HZERO_OAUTH_PASSWORD_PUBLIC_KEY:MFwwDQYJKo.......} # 密码加密私钥 private-key: ${HZERO_OAUTH_PASSWORD_PRIVATE_KEY:MIIBVQI........}
-
密码传输使用 RSA 非对称加密,注意一定要设置加密的公钥和私钥,可以直接从配置文件中拷贝,也可以使用如下工具方法生成自定义的公钥和私钥。
public static void main(String[] args) { Pair<String, String> key = EncryptionUtils.RSA.generateKeyPair(); String privateKey = key.getFirst(); String publicKey = key.getSecond(); System.out.println("PrivateKey >>>\n" + privateKey + "\n"); System.out.println("PublicKey >>>\n" + publicKey + "\n"); String content = "12345678"; System.out.println("Content >>>\n" + content + "\n"); // 使用公钥加密 String encrypt = EncryptionUtils.RSA.encrypt(content, publicKey); // 使用私钥解密 String decrypt = EncryptionUtils.RSA.decrypt(encrypt, privateKey); System.out.println("Encrypt >>>\n" + encrypt + "\n"); System.out.println("Decrypt >>>\n" + decrypt); }
-
如果覆盖或重定义了登录页面,后端访问登录页面时(/login),默认会在 Model 中返回
publicKey
公钥,前端访问登录接口时,需使用 publicKey 将密码加密后传输。前端需引入/public/static/main/js/jsencrypt.min.js
加密工具。使用方式如下<input id="publicKey" type="hidden" th:value="${publicKey}" /> function encryptPwd(password, publicKey) { // 初始化加密器 const encrypt = new JSEncrypt(); // 设置公钥 encrypt.setPublicKey(publicKey); // 加密 return encrypt.encrypt(password); }
-
如果后端需要对密码加密,可以使用
org.hzero.core.util.EncryptionUtils
工具,使用方式如下public String encryptPwd(String password, String publicKey) { return EncryptionUtils.RSA.encrypt(password, publicKey); }
依赖调整
由于 1.0.0 中合并了 choerodon 组件的源码,如果服务中依赖了 choerodon-starter-xxx 的组件,需要删除这些依赖,并使用 hzero-starter-xxx 替换,避免冲突。
如果升级了平台基础服务,业务服务中,一定要将 hzero-starter 相关组件升级到新版本,否则可能出现权限校验等问题
choerodon-starter-core
替换成hzero-starter-core
choerodon-starter-oauth-resource
替换成hzero-starter-core
choerodon-starter-swagger
替换成hzero-starter-core
choerodon-starter-config-client
替换成hzero-starter-config-client
choerodon-starter-mybatis-mapper
替换成hzero-starter-mybatis-mapper
choerodon-starter-hitoa
替换成hzero-starter-hitoa
choerodon-starter-feign-reply
替换成hzero-starter-feign-replay
choerodon-starter-oauth-core
替换成hzero-boot-oauth
-
hzero-iam
服务去除了iam-service
的依赖,并做了部分优化、源码整合。如果服务中依赖了 iam-service,需要删除依赖。如果覆盖了 Hiam 开头的源码类,类名需要去掉 Hiam 前缀。 -
hzero-oauth
服务去除了oauth-server
的依赖,并做了部分优化、源码整合。如果服务中依赖了 oauth-server,需要删除依赖。如果覆盖了源码,需根据实际覆盖情况手工调整下相关错误。
表结构升级
-
从 gitlab 上下载
1.0.0.RELEASE
的数据库脚本和Excel期初数据ssh: ~ git clone git@code.choerodon.com.cn:hzero-hzero/hzero-resource.git https: ~ git clone https://code.choerodon.com.cn/hzero-hzero/hzero-resource.git ~ git checkout 1.0.0.RELEASE
-
请先备份每个库的表结构及数据,便于出问题之后恢复
-
注意:请下载最新的 hzero-tool-liquibase.jar,不要再使用 choerodon-tool-liquibase
-
修改
database-init.sh
脚本- 修改 service,指定更新目录,与 groovy 下的目录对应即可
- 修改 数据库 url、username、password
#!/usr/bin/env bash mkdir -p tool-jar if [ ! -f tool-jar/hzero-tool-liquibase.jar ] then curl http://nexus.saas.hand-china.com/content/repositories/Hzero-Release/org/hzero/tool/liquibase-tool/1.0.0.RELEASE/liquibase-tool-1.0.0.RELEASE.jar -o ./tool-jar/hzero-tool-liquibase.jar fi # 指定更新的服务,用下划线分隔 service=hzero_platform # 更新的 schema schema=$service # 更新的目录,Groovy 脚本在 groovy 目录下,Excel 期初数据在 init-data 目录下 dir=groovy/$service java -Dspring.datasource.url="jdbc:mysql://db.hzero.org:3306/$schema?useUnicode=true&characterEncoding=utf-8&useSSL=false" \ -Dspring.datasource.username=hzero \ -Dspring.datasource.password=hzero \ -Ddata.drop=false \ -Ddata.init=true \ -Ddata.dir=$dir \ -Ddata.update.exclusion=table1,table2 \ -Dlogging.level.root=info \ -jar tool-jar/hzero-tool-liquibase.jar
-
依次更改每个目录,执行此脚本,升级表结构
-
hzero-iam 由于去除了 iam-service 的依赖,
hzero_platform
库如下表在 1.0.0 中已删除,升级时需自行根据实际情况删除fd_audit fd_lookup fd_lookup_tl fd_lookup_value fd_lookup_value_tl fd_organization fd_project fd_project_relationship fd_project_type iam_application iam_application_exploration iam_book_mark iam_dashboard iam_dashboard_role iam_group iam_menu_config iam_system_setting iam_upload_history iam_user_dashboard oauth_login_attempt_times oauth_login_history
数据升级
-
在 表结构更新 的基础上,同样修改
database-init.sh
脚本- 修改 service,指定更新目录,与
init-data
下的目录对应即可 - 修改 数据库 url、username、password
- dir 改成
init-data/$service
- 修改
-Ddata.update.exclusion
指定要排除的表或表字段
service=hzero_platform schema=$service dir=init-data/$service/iam/saas java -Dspring.datasource.url="jdbc:mysql://db.hzero.org:3306/$schema?useUnicode=true&characterEncoding=utf-8&useSSL=false" \ -Dspring.datasource.username=hzero \ -Dspring.datasource.password=hzero \ -Ddata.drop=false \ -Ddata.init=true \ -Ddata.dir=$dir \ -Ddata.update.exclusion=iam_role,iam_user, \ -jar tool-jar/hzero-tool-liquibase.jar
- 修改 service,指定更新目录,与
-
注意:更新 hzero-iam/hzero-platform 服务的数据时,确定项目是 OP 版本还是 SaaS 版本,目录需指定到具体版本的目录下更新
-
注意:hzero-iam 的数据(菜单、权限等)按服务划分,可按需升级数据
-
注意:如果是第一次部署 HZERO,可直接执行脚本更新初始化数据,如果是0.11.0升级至1.0.0,需排除部分表的更新,否则会更新已有数据
hzero_platform
-Ddata.update.exclusion=iam_role,fd_organization,iam_user,hiam_user_info,iam_member_role,oauth_client,oauth_ldap,oauth_password_policy,hpfm_permission_range,hpfm_permission_rule,hpfm_permission_rel,hpfm_config,hpfm_code_rule,hpfm_code_rule,hpfm_code_rule_detail,hpfm_static_text,hpfm_static_text_value,hpfm_tenant,hpfm_group
hzero-message
- 消息模板有新增消息模板,如果直接通过 excel 更新数据,可能会更新已存在的数据,所以需先备份好数据之后再更新,便于恢复。
-Ddata.update.exclusion=hmsg_email_server,hmsg_email_property,hmsg_sms_server,hmsg_receive_config,hmsg_receiver_type,hmsg_message_template.template_content,hmsg_message_template.external_code
hzero_workflow_plus
需要更新
-
依次更改每个目录,执行此脚本,升级数据
数据处理
-
由于菜单、角色使用编码作为路径,需调用 hzero-iam 下的 data-init-controller [/v1/init/data-fix] 接口修复菜单、角色历史数据
-
租户增加多语言,修复历史数据 (hzero_platform)
INSERT INTO hpfm_tenant_tl ( tenant_id, lang, tenant_name ) ( SELECT tenant_id, 'zh_CN', tenant_name FROM hpfm_tenant t WHERE NOT EXISTS ( SELECT 1 FROM hpfm_tenant_tl tl WHERE t.tenant_id = tl.tenant_id AND tl.lang = 'zh_CN' ) ); INSERT INTO hpfm_tenant_tl ( tenant_id, lang, tenant_name ) ( SELECT tenant_id, 'en_US', tenant_name FROM hpfm_tenant t WHERE NOT EXISTS ( SELECT 1 FROM hpfm_tenant_tl tl WHERE t.tenant_id = tl.tenant_id AND tl.lang = 'en_US' ) );
-
值集视图增加多语言,修复历史数据 (hzero_platform)
INSERT INTO hpfm_lov_view_header_tl ( view_header_id, lang, view_name, title ) ( SELECT view_header_id, 'zh_CN', view_name, title FROM hpfm_lov_view_header t WHERE NOT EXISTS ( SELECT 1 FROM hpfm_lov_view_header_tl tl WHERE t.view_header_id = tl.view_header_id AND tl.lang = 'zh_CN' ) ); INSERT INTO hpfm_lov_view_header_tl ( view_header_id, lang, view_name, title ) ( SELECT view_header_id, 'en_US', view_name, title FROM hpfm_lov_view_header t WHERE NOT EXISTS ( SELECT 1 FROM hpfm_lov_view_header_tl tl WHERE t.view_header_id = tl.view_header_id AND tl.lang = 'en_US' ) );
-
值集视图行增加多语言,修复历史数据 (hzero_platform)
INSERT INTO hpfm_lov_view_line_tl ( view_line_id, lang, display ) ( SELECT view_line_id, 'zh_CN', display FROM hpfm_lov_view_line t WHERE NOT EXISTS ( SELECT 1 FROM hpfm_lov_view_line_tl tl WHERE t.view_line_id = tl.view_line_id AND tl.lang = 'zh_CN' ) ); INSERT INTO hpfm_lov_view_line_tl ( view_line_id, lang, display ) ( SELECT view_line_id, 'en_US', display FROM hpfm_lov_view_line t WHERE NOT EXISTS ( SELECT 1 FROM hpfm_lov_view_line_tl tl WHERE t.view_line_id = tl.view_line_id AND tl.lang = 'en_US' ) );
-
接口平台发布地址字段变更,修复历史数据 (hzero_interface)
UPDATE hitf_interface_server his SET his.namespace = ( SELECT ht.tenant_num FROM hzero_platform.hpfm_tenant ht WHERE his.tenant_id = ht.tenant_id )
-
(可选)补全平台多语言数据,若英文数据少于中文数据时使用下面的SQL补全数据即可。
INSERT INTO hpfm_prompt (tenant_id, prompt_key,prompt_code, lang, description ) (
SELECT
t.tenant_id,
t.prompt_key,
t.prompt_code,
'en_US',
t.description
FROM
hpfm_prompt t
WHERE t.lang = 'zh_CN'
and NOT EXISTS ( SELECT 1 FROM hpfm_prompt tl WHERE t.prompt_key = tl.prompt_key
and t.prompt_code = tl.prompt_code
and t.tenant_id = tl.tenant_id
AND tl.lang = 'en_US')
);
前端升级指南
以下前端模块升级至 1.0.0
- hzero-front
- hzero-front-runtime
- hzero-front-hagd
- hzero-front-hcnf
- hzero-front-hdtt
- hzero-front-hfile
- hzero-front-hiam
- hzero-front-himp
- hzero-front-hitf
- hzero-front-hmsg
- hzero-front-hmnt
- hzero-front-hnlp
- hzero-front-hpay
- hzero-front-hpfm
- hzero-front-hrpt
- hzero-front-hsdr
- hzero-front-hsgp
- hzero-front-hwfp
前端升级步骤
-
调整 package.json 版本
在根目录下的
package.json
中更改hzero-front-*
的版本号;比如:
hzero-front-hiam: ^0.11.0
调整为hzero-front-hiam: ^1.0.0
; -
重新安装依赖
在终端中运行如下命令重新安装依赖
yarn —registry=http://nexus.saas.hand-china.com/content/groups/hzero-npm-group/
-
升级 hzero-front-runtime
使用 hzero-front-cli 来升级 hzero-front-runtime,更新配置;
hzero-front-cli .
注意:
1.只是用yarn升级hzero-front-runtime的话,新的环境变量等配置是不会被更新的。
2.在升级
hzero-front-runtime
时,最好备份一下更改过的环境变量相关的内容和 webpack 配置相关的修改。