10分钟搭建GitLab仓库及Drone自动化部署

     互联网公司成立后 软件团队首要做的便是搭建基础设施 运维部门搭建 代码仓库 自动化集成部署 便是伟大的第一步。
     在这里 花费10分钟 时间 从0到1 搭建完整的 [GitLab仓库,Drone自动化部署Java服务] 轻量化CI/CD持续集成部署功能链路。

一.GitLab搭建
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
# 创建公共网络
docker network create cicd_network

# 下载GitLab镜像
docker pull gitlab/gitlab-ce

# 运行GitLab服务
docker run --network cicd_network -d -p 443:443 -p 80:80 -p 22:22 --name gitlab --restart always -v /home/gitlab/config:/home/gitlab/config -v /home/gitlab/logs:/home/gitlab/logs -v /home/gitlab/data:/home/gitlab/data gitlab/gitlab-ce

# 进入容器->查看管理员密码
docker exec -it gitlab /bin/bash
cat /etc/gitlab/initial_root_password

# 管理员账号: root
# 管理员密码: Mi4FZWvbeIghqMALXGZd7IkxmIfHNrmLZpnhab8Daf8=

# 进入容器->修改配置[首次部署需等待容器内安装完成后再修改,避免产生其他问题]
docker exec -it gitlab /bin/bash
vi /etc/gitlab/gitlab.rb

external_url='http://192.168.0.1'
gitlab_rails['gitlab_ssh_host'] = '192.168.0.1'
gitlab_rails['gitlab_shell_ssh_port'] = 22

# GitLab外部网络设置Allow【Admin->Settings->Network->Outbound requests】

# 重启服务
docker restart gitlab

# 登录GitLab
http://192.168.0.1/users/sign_in
二.Java项目初始化
1
2
3
4
5
6
7
8
9
10
11
# GitLab创建应用【Admin->Applications->add New application】
RedirectURI= http://192.168.0.1:2080/login
ApplicationID= 1e50d47b793a8458a62b033a2d436e2b62be2df2518218fa130b432794635c74
Secret= gloas-bf787c02e057df6c42f772547ae3f8a3c153b6213c025450685219eeeb07448d

# 生成本地 SSH-Key
ssh-keygen -t rsa -b 4096 -C "lixiang@tron.com"
# SSH-Key 添加至GitLab【点击头像->Preferences->SSH Keys->add New key】

# Hello-World Java项目初始化及代码提交
下载地址 = https://lixiangpro.oss-cn-hangzhou.aliyuncs.com/resource/hello-world.rar
三.部署Drone
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 拉取镜像
docker pull drone/drone
docker pull drone/drone-runner-docker

# 运行 Drone-server
docker run --network cicd_network --volume=/var/lib/drone:/data --env=DRONE_AGENTS_ENABLED=true --env=DRONE_GITLAB_SERVER=http://192.168.0.1 --env=DRONE_GITLAB_CLIENT_ID=0b7a89352763fffc7a53ff5ebc5a49472376f8f04075d24a3d43354049915bac --env=DRONE_GITLAB_CLIENT_SECRET=gloas-932f99b89bd76ae921e0b994ac8ec47ca764d660ed86d8e7e913958749ad2b1e --env=DRONE_SERVER_HOST=192.168.0.1:2080 --env=DRONE_SERVER_PROTO=http --env=DRONE_TLS_AUTOCERT=false --env=DRONE_LOGS_DEBUG=true -e DRONE_RPC_SECRET=033a2d436e2b62be2df2518218fa130 --env=DRONE_USER_CREATE=username:root,admin:true -e TZ="Asia/Shanghai" --publish=2080:80 --publish=2443:443 --restart=always --detach=true --name=drone-server drone/drone:2

# 运行 Drone-runner
docker run --network cicd_network -d -v /var/run/docker.sock:/var/run/docker.sock -e DRONE_RPC_PROTO=http -e DRONE_RPC_HOST=192.168.0.1:2080 -e DRONE_RPC_SECRET=033a2d436e2b62be2df2518218fa130 -e DRONE_RUNNER_CAPACITY=2 -e DRONE_RUNNER_NAME=drone-runner -e TZ="Asia/Shanghai" -p 3000:3000 --restart always --name drone-runner drone/drone-runner-docker

# Drone后台 http://192.168.0.1:2080
修改配置【项目根目录/Settings/Project Settings】调整为Trust等

# GitLab项目配置WEBHOOK
进入GitLab后台【项目根目录->Settings->Webhooks】http://192.168.0.1
检查确认WebHook地址URL = http://192.168.0.1:2080/hook

# 代码master分支提交更改 验收自动化持续集成部署

至此_已完成_自动化持续集成部署

DevOps流程及工具

DevOps及工具.webp

使用效果

克隆代码:克隆.png
打包JAR:打包.png
成功部署:完成.png
Hello World:验收.png

附加:Drone配置
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
kind: pipeline
type: docker
name: Hello_World
clone:
disable: true #禁用默认克隆
trigger:
branch:
- master #仅在 master分支的代码提交,才触发部署
steps:
- name: 克隆
image: alpine/git
pull: if-not-exists
commands:
- git version
- git clone http://192.168.0.1/root/hello-world.git
- cd hello-world && git checkout master

- name: 打包
image: caoofduty/maven_jdk_17:v3 # maven:3.6.3-openjdk-17
pull: if-not-exists
volumes:
# 挂载宿主机的目录
- name: maven-build
path: /data/build
commands:
- cd hello-world
- mvn -Dmaven.test.skip=true -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true package
- mkdir -p /data/build
- cp target/*.jar /data/build
- cp run.sh /data/build
- cp Dockerfile /data/build

- name: 构建镜像
image: plugins/docker
volumes:
- name: maven-build
path: /data/build
- name: docker
path: /var/run/docker.sock # 挂载宿主机的docker
settings:
dockerfile: /data/build/Dockerfile
commands:
- cd /data/build
- docker --version
- docker build -t hello_world:latest -f /data/build/Dockerfile .
- docker images

- name: 发布
image: plugins/docker
volumes:
- name: maven-build
path: /data/build
- name: docker
path: /var/run/docker.sock # 挂载宿主机的docker
settings:
dockerfile: /data/build/Dockerfile
commands:
- cd /data/build
- docker --version
- docker images
- docker run -d --name hello_world -p 8080:8080 -e TZ="Asia/Shanghai" hello_world:latest

- name: 成功了,庆祝~
image: alpine
commands:
- echo hello world

volumes:
- name: maven-build
host:
path: /data/build # 从宿主机中挂载的目录
- name: docker
host:
path: /var/run/docker.sock
# - name: maven-cache
# host:
# path: /data/cache # 从宿主机中挂载的目录
附加:DockerFile
1
2
3
4
5
6
7
FROM openjdk:17

ADD hello-world-0.0.1-SNAPSHOT.jar /home/app.jar

EXPOSE 8080

CMD ["java", "-jar", "/home/app.jar"]