Skip to content

Commit

Permalink
push all blogs
Browse files Browse the repository at this point in the history
  • Loading branch information
leonGravel committed Nov 8, 2018
1 parent 9a8e9de commit 76eaa28
Show file tree
Hide file tree
Showing 179 changed files with 22,217 additions and 7 deletions.
19 changes: 19 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
sudo: false
language: go
git:
depth: 1
install: go get -v github.com/gohugoio/hugo
script:
‐ hugo
deploy:
provider: pages
skip_cleanup: true
github_token: $hexoCI
on:
branch: hugo
local_dir: public
repo: leongravel/blog
fqdn: <custom-domain-if-needed>
target_branch: master
email: la9249@163.com
name: leonGravel
2 changes: 1 addition & 1 deletion config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,4 @@ disqusShortname = "leongravel"
name = "About"
identifier = "about"
weight = 300
url = "/about/"
url = "/about/about"
37 changes: 37 additions & 0 deletions content/posts/Dubbo在Docker中的服务注册.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
---
title: Dubbo在Docker中的服务注册
categories: Java
tags: [docker,dubbo]
date: 2018-09-28 23:01:41
author: gravel
---
今天在部署的时候,发现服务提供者启动成功,但是消费者没法拿到服务。查了下发现是服务提供者没注册成功。

<!--more-->

### 问题分析
当docker容器部署dubbo提供者和常规部署应用混合使用一套zookeeper时,将出现Docker容器中的dubbo提供者向zookeeper注册容器IP导致常规部署应用无法访问容器IP而失败。
### 解决方案
在github上查的时候,发现有人提出了这个[问题][1],官方回复是将在2.5.7的版本中解决。
Dubbo在启动阶段提供两对系统属性,用于设置外部通信的IP和端口地址。
* DUBBO_IP_TO_REGISTRY --- 注册到注册中心的IP地址
* DUBBO_PORT_TO_REGISTRY --- 注册到注册中心的端口
* DUBBO_IP_TO_BIND --- 监听IP地址
* DUBBO_PORT_TO_BIND --- 监听端口

我将启动命令改为如下格式:
```
docker run -d \
--name <containerName> \
--net dubbo \
-e DUBBO_IP_TO_REGISTRY=<ip> \
-e DUBBO_PORT_TO_REGISTRY=<port> \
-p <ip>:<port>:<port> \
-v dubbo:/log \
--restart=always \
<imageName>
```

问题得到解决!

[1]: https://github.com/apache/incubator-dubbo/issues/668
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
---
title: gitlab runner + docker 自动构建
categories: Docker
tags: [docker,gitlab-CI]
date: 2018-09-11 23:01:41
author: gravel
---

最开始的时候,我尝试Jenkins+docker,可是Jenkins的docker依赖和插件,实在太过麻烦,配置项等等,太重。所以我转为使用gitlab runner来实现自动构建并打包镜像。

<!--more-->

## 准备工作
* 安装docker
* 在docker同一个机器上安装gitlab runner
* 配置.gitlab-ci.yml

### 安装Docker
参考官方文档,唯一需要注意的是,需要将镜像仓库地址修改为私有的地址。可以通过配置Deamon.json实现。具体配置如下。
`registry-mirrors`代表私有仓库地址,`insecure-registries`的作用是,push指向的地址。
> Docker自从1.3.X之后docker registry交互默认使用的是HTTPS,所以这里最好直接指定仓库地址,不然push的时候会报错。

```
{
"registry-mirrors": [
"http://registry.******.com:5000"
],
"insecure-registries": [
"registry.******.com:5000"
],
"debug": true,
"experimental": false
}
```
### 安装gitlab runner
服务器是centos 7,以下的步骤都是基于centos 7
#### 下载二进制安装文件
```
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
```

#### 安装
```
sudo yum install gitlab-runner
```

#### 注册Runner
```
sudo gitlab-runner register
```

1. 填入填入私有gitlab的url
```
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
https://gitlab.******.com
```

2. 输入项目的gitlab token
```
Please enter the gitlab-ci token for this runner
xxx
```

3. 添加runner描述
```
Please enter the gitlab-ci description for this runner
jiedu-ci
```
4. 添加描述标签,若添加多个需用逗号隔开
```
Please enter the gitlab-ci tags for this runner (comma separated):
ci,shws,jiedu
```

5. 选择runner 运行模式
这里我选择的Docker,因为我们要使用docker 镜像以及一些其他的镜像

>其他的我也不是很了解
```
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
docker
```
6. 设置基础镜像
```
Please enter the Docker image (eg. ruby:2.1):
registry.******.com:5000/dzjz/ci/maven
```

#### 配置gitlab runner
```
vi /etc/gitlab-runner/config.toml
```
写入
```
concurrent = 1
check_interval = 0
environment = ["MAVEN_HOME=/path/to/maven"]
[[runners]]
name = "shws-ci"
url = "http://gitlab.******.com"
token = "234234*******************"
executor = "docker"
output_limit = 208192
[runners.docker]
tls_verify = false
image = "registry.******.com:5000/dzjz/ci/maven"
privileged = true
cache_dir = "cache"
disable_cache = false
volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache","/root/.m2:/root/.m2"]
shm_size = 0
pull_policy = "if-not-present"
[runners.cache]
```
当然这个部分后期会进一步完善修改,目前只是一个示例。

### 配置.gitlab-ci.yml
这一部分,具体可以参考官方文档以及[这篇](https://segmentfault.com/a/1190000011890710),项目的配置如下:
```
# 定义stages
stages:
- build
- push
# 构建各个依赖组件的jar包,并复制Dockerfile对应位置等待构建.
build-job:
# image: registry.******.com:5000/dzjz/ci/maven
stage: build
only:
- feature/20180428-1.0.0.0script1-第二版
script:
- mkdir -p jd-ci/shws/kf
- cd shws/ && pwd
- mvn clean install -U
- echo '准备发布生活卫生镜像到私有镜像仓库!'
- rm -rf src/dockerfile/*.war
- cd .. && pwd
- cp -r shws/target/shws.war shws/src/dockerfile/Dockerfile jd-ci/shws/kf
- cd jd-ci/shws/kf/ && ls
## 下面这个配置的作用是在不同的job间传递共享war包以及Dockerfile
artifacts:
name: "${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG}"
paths:
- jd-ci/shws/kf/*
expire_in: 1 day
push-job:
stage: push
only:
- feature/20180428-1.0.0.0script1-第二版
image: registry.******.com:5000/docker:latest
services:
- registry.******.com:5000/docker:dind
before_script:
- docker info
script:
- echo '准备构建镜像并push到私有仓库'
#- cd ./jd/shws/kf/ && ls
- docker stop shws-kf || true
- docker rm -f shws-kf || true
- docker rmi registry.******.com:5000/cdjd/shws-kf || true
- docker build -t registry.******.com:5000/cdjd/shws-kf ./jd-ci/shws/kf/
- docker push registry.******.com:5000/cdjd/shws-kf
- rm -rf jd-ci/shws/kf
```

这个配置文件中,`only`部分代表你的分支,script部分代表对应的脚本。其他业务系统需要替换的东西(比如构建镜像的名字,缓存的名称,这些可以自定义)。
### 结束
以上就是gitlab runner + docker实现自动构建打包镜像并上传的简单教程。
129 changes: 129 additions & 0 deletions content/posts/PostgreSQL-Date-Functions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
---
title: postgreSQL 日期函数整理
categories: Coding
tags: [sql]
date: 2018-03-19 21:18:41
---


最近在项目中维护某一张表的固定数据的时候,经常会用到postgreSQL的各种日期函数,所以简单整理一下。<!-- more -->
## 获取系统时间的函数
### 获取当前完整时间
* 通过now()获取的时间是最完整的时间,包括时区,秒也保留到了6位小数。
```
select now();
-- 得到如下结果
'2018-03-19 21:28:31.545145+08'
```
* current_timestamp 效果是和now()一样的。
```
select current_timestamp效果是和now;
-- 得到如下结果
'2018-03-19 21:29:31.545145+08'
```
### 获取当前时间
* current_time 只显示当前的时间,不包括日期
```
select current_time;
-- 得到的结果如下
21:29:31.545145+08'
```
### 获取当前日期
* current_date 只显示当前的日期,不包括小时等信息
```
select current_date;
-- 得到的结果如下
'2018-03-19'
```

## 日期计算函数
### 日期简单的加减
1. 一年后
```
select now() + interval '1 years';
select now() + interval '1 year';
select now() + interval '1 y';
select now() + interval '2 Y';
select now() + interval '2Y';
```
这几种写法都OK的。
2. 一个月后
```
select now() + interval '1 month';
```
3. 一周后
```
select now() + interval '1 week';
```
4. 一天后
```
select now() + '1 day'
```
5. 一分钟后
```
select now() + '1 min';
```

interval 可以不写,其值可以是:

| Abbreviation | Meaning |
| ------------ | -------------------------- |
| Y | Years |
| M | Months (in the date part) |
| W | Weeks |
| D | Days |
| H | Hours |
| M | Minutes (in the time part) |
| S | Seconds |


### 计算时间差
使用 age(timestamp, timestamp)计算时间差
函数描述:计算两个日期之间相隔多少天,单个参数时表示与当前日期(current_date)相比
参数:age(timestamp,timestamp),age(timestamp)
返回值:interval,两个日期之间的相隔天数

示例:
```
Select age(timestamp '2001-04-10', timestamp '1957-06-13')
Result: 43 years 9 mons 27 days
```
## 时间字段的截取

在开发的过程中,有时候经常会用到日期的年,月,日,小时等值,PostgreSQL给我们 提供了一个非常便利的EXTRACT函数。
```
EXTRACT(field FROM source)
```
field 表示取的时间对象,source 表示取的日期来源,类型为 timestamp、time 或 interval。
* 取年份
```
select extract(year from now());
Result: 2018
```
* 取月份
```
select extract(month from now());
Result: 3
select extract(day from timestamp '1994-08-20');
Result: 8
```
* 查看今天是一年中的第几天
```
select extract(doy from now());
```
* 查看现在距1970-01-01 00:00:00 UTC 的秒数
```
select extract(epoch from now());
```
* 把epoch 值转换回时间戳
```
SELECT TIMESTAMP WITH TIME ZONE 'epoch' + 1369755555 * INTERVAL '1 second';
```

## 结语
以上是基本的PG时间/日期函数使用,有些函数因为下班了,家里电脑没环境,没跑结果出来,明天补上。`(明日复明日。。明日何其多。。)`

详细用法请参考:[PostgreSQL官方说明][1]


[1]: http://www.postgresql.org/docs/9.2/static/functions-datetime.html
Loading

0 comments on commit 76eaa28

Please sign in to comment.