自己实现一个简单的 DevOps 工具系列(后端篇)- 1

Posted by Sinsy on September 21, 2020 About 2 k words and Need 6 min

自己实现一个简单的 DevOps 工具系列(后端篇)- 1

什么是 DevOps

DevOps(Development和Operations的组合词)是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。

背景

由于本人在内网开发,类似 Jenkins、tekton 这些 CI/CD 的工具平台,我是很难用到,需要代理配置,所以我个人写了一个简单的 CI/CD 工具,给自己使用,也供大家参考。

需要用到的工具以及语言

思路

CI/CD 简易流程

由客户端将代码 push 推送到 git 仓库,git 里面配置 hooks 里面的 post-update 文件。我一般写 shell,而不是在里面直接写,当推送的时候会触发 post-update 脚本文件。开始从 mvc 单元测试、构建代码,之后 生成一个 jar。通过 docker-compose 来更新服务。完成一个简单的编译构建。

实现如下

首先初始化一个线上仓库

1
git init --bare demo.git

进入 demo.git 文件里面 hooks,修改 post-update.sample 文件。具体作用看 自定义 Git - Git 钩子。vi post-update。同时将 exec git update-server-info 注释掉。

1
2
3
cd demo.git/hooks/
mv post-update.sample post-update
vi post-update

post-update 内容

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
34
35
36
37
38
39
40
41
42
43
#!/bin/sh

cd ../

# 首次 push
for file in *
do
    if [[ ${file} =~ (.*).git ]]
    then
        file_name=${file}
    fi
done

# file_name = xxx.git 正则匹配后 project_name = xxx
project_name=${file_name%.*}

rm -fr ${project_name}

# 22 默认端口,如果 ssh 端口修改了 这里也要修改
git clone ssh://root@localhost:22/root/${project_name}.git

cd ${project_name}

# 构建
mvn clean

# 一般我是跳过单元测试
# mvn package -Dmaven.test.skip=true
mvn package

cd target

# 这里因为我的应用里面有 compose 文件夹
cp ${project_name}.jar ../compose/

cd ../compose/

docker-compose -f ${project_name}.yaml down

# 启动容器
docker-compose -f ${project_name}.yaml up -d

echo "Complete deployment"

工程目录

工程目录

compose 里面的 yaml 文件,我一般是跟项目名字,也呼吁 post-update 里面内容。当然你自己也可以修改。相对应的也要修改 post-update 。

yaml 内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
version: "3"
services:
  demo-service:
    container_name: demo
    restart: always
    image: java:8
    network_mode: bridge
    volumes:
      - /root/demo/compose/demo.jar:/demo.jar
      - /etc/localtime:/etc/localtime
    ports:
      - "8080:8080"
    environment:
      - TZ="Asia/Shanghai"
    entrypoint: java -jar demo.jar

之后,将服务 git clone ssh://root@localhost:22/root/demo.git 到本地,和项目做关联。

效果如下

提交代码之后效果

submit-effect

服务直接更新 service-effect

不足以及更丰富

  1. 同目录底下不能多个 xxx.git 文件夹
  2. 没有流水线
  3. 可以更新代码审查
  4. UI 界面设置
  5. 代码管理

之后有会不定期更新这个系列,完善这个devops工具。多了之后做一个开源项目,感谢观看。

声明

作者: Sinsy
本文链接:https://blog.sincehub.cn/2020/09/21/finish-devops-1/
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文声明。
如您有任何商业合作或者授权方面的协商,请给我留言:550569627@qq.com

引用