0%

或许在Nas(群晖[Docker])上Gogs和Drone更配哦

关于DroneDocker in Docker (dind)解决方案,本人历经2天尝试了各种解决方案,最终解决方案为volumes挂载,已在本文体现

为什么

为什么?为什么要使用GogsDrone?答案是习惯!!!

工作中一般使用GIT管理工具为gitlab,自有开源项目一般都是使用的github,自有私有项目之前一直用gitee;玩Nas也有好几年了,最初也想过在Nas上通过docker搭建gitlab无奈配置不过硬

怎么说呢?了解Gogs是在它出来的那一段时间,但是也一直没有用过。最近心血来潮还是想自己在Nas上做一个GIT私有服;于是挑中了GogsGitea,鉴于两个服务属于同源最后选择了Gogs

Gogs

关于Gogs的安装我这里就不过多的赘述,可以看下面的两个文档

Gogs Github

Gogs Docker

这需要说明的是Gogs支持MySQL, PostgreSQL, SQLite3, MSSQLTiDB;目前我使用的是MySQL,关于Mysql的安装部署可以查看官方文档这里也不过多赘述

Mysql安装文档

对于在群晖Docker中去管理Mysql的工具这里我推荐adminer安装文档如下

adminer安装文档

最后我要说的是一个是端口映射的问题,一个是卷映射的问题,如下图


最后直接访问:http://192.168.1.2:10080就OK了

这里贴出一下整个Gogs配置文件

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
// /data/gogs/conf/app.ini

APP_NAME = Gogs
RUN_USER = git
RUN_MODE = prod

[database]
DB_TYPE = mysql
HOST     = 192.168.1.2:3306 // mysql地址端口
NAME     = gogs
USER = root
PASSWD   = password // mysql密码
SSL_MODE = disable
PATH = data/gogs.db

[repository]
ROOT = /data/git/gogs-repositories
publish
[server]
DOMAIN           = 192.168.1.2 // 访问域名
HTTP_PORT       = 10080 // http端口
ROOT_URL         = http://192.168.1.2/ // 访问域名
DISABLE_SSH = false
SSH_PORT         = 10022 // SSH端口
START_SSH_SERVER = false
OFFLINE_MODE = false

[mailer]
ENABLED = false

[service]
REGISTER_EMAIL_CONFIRM = false
ENABLE_NOTIFY_MAIL = false
DISABLE_REGISTRATION   = true // 禁止注册,只能有管理员能加账号
ENABLE_CAPTCHA         = true
REQUIRE_SIGNIN_VIEW   = true // 默认跳转到登录页

[picture]
DISABLE_GRAVATAR = false
ENABLE_FEDERATED_AVATAR = false

[session]
PROVIDER = file

[log]
MODE = file
LEVEL = Info
ROOT_PATH = /app/gogs/log

[security]
INSTALL_LOCK = true
SECRET_KEY = security

到此为止,我们就完成了Gogs的所有安装

Drone

Drone安装

为什么?为什么要使用Drone还是因为习惯。因为在使用Gitlab的时候使用的CI/CD都是gitlab自带的gitlab ci;所以这里我们也需要一个CI/CD的工具于是我选择了Drone,当然市场上CI/CD的工具是比较多的

Drone安装这里我们参考官方文档

Gogs单机安装文档

Docker命令如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
docker run \
-d \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /volume1/docker/drone:/data \
-e DRONE_GIT_ALWAYS_AUTH=false \
-e DRONE_GOGS_SERVER=http://192.168.1.2:10080 \
-e DRONE_SERVER_HOST=http://192.168.1.2:10800 \
-e DRONE_DATABASE_DRIVER=mysql \
-e DRONE_DATABASE_DATASOURCE="root:password@tcp(192.168.1.2:3306)/drone?parseTime=true" \
-p 80:80 \
-p 443:443 \
--name=drone \
drone/drone:latest

这里贴别强调一下/var/run/docker.sock:/var/run/docker.sock的挂载是必不可少的,因为后面的DIND会用到,另外因为我使用了Mysql所以上面DRONE_DATABASE_DRIVER配置为mysql

接下来访问http://192.168.1.2:10800就会出现Drone登录界面,账号为Gogs管理员账号,这两个账号相通,而且也会自动同步Gogs项目

.drone.yml

在编辑.drone.yml之前我们需要在drone管理界面对项目设置

这里需要设置项目为受信任项目,如果Project settings未显示,则表示当前用户在Drone不是管理员可以更改数据库授权为管理员

1
UPDATE `users` SET `user_admin` = '1' WHERE `user_id` = '1';

接下来我们编写.drone.yml,对于.drone.yml编写我们以Spring Boot项目为例,首先我们需要编辑DockerFile
1
2
3
4
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD target/hello-1.0.0.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

接下来我们编辑.drone.yml,关于.drone.yml请参考.drone.yml文档
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
kind: pipeline
name: default

steps:
- name: build
image: maven:3.5-jdk-8
commands:
- mvn package -B -Dmaven.test.skip=true # 打包跳过测试

- name: publish
image: docker:dind
volumes:
- name: docker
path: /var/run/docker.sock # dind挂载来自Drone容器/var/run/docker.sock
commands:
- docker login --username=* --password=* registry.cn-shenzhen.aliyuncs.com
- docker build -t spring-boot:master .
- docker tag spring-boot:master registry.cn-shenzhen.aliyuncs.com/new/spring-boot:master
- docker push registry.cn-shenzhen.aliyuncs.com/new/spring-boot:master

volumes:
- name: docker
host:
path: /var/run/docker.sock # 这里挂载Drone容器所在/var/run/docker.sock,当然Drone容器/var/run/docker.sock来自于群晖宿主机/var/run/docker.sock

通过上面我们定义了两步,build利用mavenSpring Boot进行了打包操作;publish利用dind将打包好的jar包通过DockerFile打包成镜像并推送到镜像仓库,这里说一下我使用的镜像仓库是阿里云

这里也请注意WebHook的地址为上面安装的Drone地址请注意填写正确

下面我们看一下Drone执行过程

到这里我们就告一段落了


以上就是群晖对接整个GogsDrone过程

我就想试试,没别的意思!