0%

前记

公司部分业务使用的是阿里的docker swarm服务,在配置nodejs应用时发现时区不对。

处理

记录下自己所选择的方式。

我选择在Dockerfile文件中做处理,这样利于以后所有引用此镜像的容器时区的正确性。

1
2
RUN echo "Asia/Shanghai" > /etc/timezone \
&& dpkg-reconfigure -f noninteractive tzdata

我们不生产k8s管理平台,我们只是开源项目的搬运工

Rancher

Rancher是一个开源的企业级容器管理平台。通过Rancher,企业再也不必自己使用一系列的开源软件去从头搭建容器服务平台。Rancher提供了在生产环境中使用的管理Docker和Kubernetes的全栈化容器部署与管理平台。

Kubernetes Dashboard

Kubernetes Dashboard是Kubernetes集群的基于Web的通用UI。它允许用户管理在群集中运行的应用程序并对其进行故障排除,以及管理群集本身。

Wayne

Wayne是一个通用的、基于 Web 的 Kubernetes 多集群管理平台。通过可视化 Kubernetes 对象模板编辑的方式,降低业务接入成本, 拥有完整的权限管理系统,适应多租户场景,是一款适合企业级集群使用的发布平台。

Naftis

Naftis是一个基于 web 的 Istio dashboard,通过任务模板的方式来帮助用户更方便地执行 Istio 任务。 用户可以在 Naftis 中定义自己的任务模板,并填充变量来构造单个或多个构造任务实例,从而完成各种服务治理功能。

Breeze

Breeze是睿云智合提供的图形化Kubernetes部署工具。

Nacos

Nacos是阿里巴巴的新开源项目,其核心定位是 “一个更易于帮助构建云原生应用的动态服务发现、配置和服务管理平台”。

Nacos可能更多的是为了支持一整套微服务。包括DubboSpring Cloud以及Kubernetes等。


最后相对来说,我还是比较喜欢用Rancher

前记

毫无疑问,Mybatis-Plus是优秀的。
Mybatis-Plus官网的文档中,自定义分页只能只支持xml方式,但是鉴于本人对xml并不是太喜欢,而是喜欢用注解的方式。

于是,记录了在Mybatis-Plus中注解分页方式实现。

实现

首先讲一下我的请求:

1
controller->service->mapper->entity

UserService.java

1
2
3
4
5
6
7
8
9
10
public Object getAll() {
Page userList = new Page<>(1, 5);
Map<String, Object> param = new HashMap<>();
param.put("name", "测试788");
param.put("page", userList);
List<Map<String, Object>> userListArr = mapper.getAllUserGoodsSQLPage(param);
userList.setRecords(userListArr);

return userList;
}

UserMapper.java

1
2
3
4
5
6
7
8
9
@Select("<script>SELECT u.id,u.name from " + TABLE + " as u " +
"left join " + G_TABLE + " as g " +
"on u.id = g.uid " +
"where u.name = #{name}" +
"<if test = 'id != null'>" +
" and u.id = #{id}" +
"</if>" +
"</script>")
List<Map<String, Object>> getAllUserGoodsSQLPage(Map<String, Object> param);

JSON

1、查询数组中对象

JSON_CONTAINS 用法

1
2
3
4
5
select * from circulation
where JSON_CONTAINS(goods->'$[*].name', '["海带结(香辣味)150克/袋"]', '$')

select * from circulation
where JSON_CONTAINS(goods->'$[*].gid', '[20]', '$')

2、Json字符串转化为Json对象

CONVERT 用法

1
select CONVERT('{"mail": "amy@gmail.com", "name": "Amy"}',JSON)

3、元素转化为数组

JSON_ARRAY 用法

1
SELECT JSON_ARRAY(1, "abc", NULL, TRUE, CURTIME())

4、数组中查询元素

JSON_CONTAINS + JSON_ARRAY用法

1
select JSON_CONTAINS(JSON_ARRAY(1,2,3,4,5,6),'6')

5、数组模糊查询

JSON_SEARCH用法

1
select * from table where JSON_SEARCH(profiles, 'all', 'sales%') is not null

常规

1、查询重复记录

1
2
select * from merchant
where num in (select num from synk.merchant group by num having count(num) > 1)

前记

很久都没有写博客了,不是没时间,可能就是纯粹的懒吧。

背景

公司内部版本管理一直以来都是用的Gitlab,而系统早在前年的时候就已经全部上了Dockergitlab-runner发布过后就一直想利用gitlab-runner进行CI/CD自动化的部署。

Gitlab && Gitlab-Runner

基于原生原方案

关于gitlab && gitlab-runner的安装我这边就不赘述了,不会的可以看官方的文档。

Gitlab

Runner的安装和注册

我们在物理机或云上部署的时候一个流程图如下:

从上图我们可以看出,当我们的服务器多了之后每个服务器都需要安装runner服务,这对于我这样懒的人感觉好麻烦的;受不了。

当然也有可以解决的方案,如:单独用一服务器挂载共享磁盘。

基于Docker新方案

今天我们重点来谈谈,gitlab如何和docker完美结合

先看看看架构图,如下:

接下来我们来说明一哈上面这张图的一个工作流程。

1、开发人员通过本地push代码到gitlab
2、gitlab-runner会根据代码根目录下的gitlab-ci.yml文件执行CIgitlab-ci.yml使用说明请移步:gitlab-ci使用说明
3、在CI过程中会去读取你在代码下Dockerfile文件构建镜像。docker的使用我们这里不做过多赘述
4、将镜像推送到镜像仓库,可以自建,也可以用像阿里云的仓库
5、docker拉去镜像对服务进行部署。