前面我们基于Docker搭建了Gitea,今天我们继续来学习自动发布,说到代码发布,开源的产品非常之多,目前主流的要数jenkins
了,但是这货对于我来说,太重了、太臃肿了,最终我选择了Drone
。
安装Drone
分Server端
和Runner端
两部分,这里的Runner
我安装的是Exec Runner
.
安装Drone Server 配置Gitea OAuth 个人
->设置
->应用
创建成功后,便会生成客户端ID
和客户端密钥
,这需要配置在Drone
中
Docker启动Drone 1 2 3 4 5 6 7 8 9 10 11 12 docker run \ --volume=/root/drone:/data \ --env=DRONE_GITEA_SERVER=http://101.34.179.216:3000/ \ --env=DRONE_GITEA_CLIENT_ID=2093500c-70c8-49ed-97cc-b68de7d40dbc \ --env=DRONE_GITEA_CLIENT_SECRET=AHqbnELyo8gud4cTs2206Ysf973k7YPdDOxCuvsBRo7Y \ --env=DRONE_RPC_SECRET=super-duper-secret \ --env=DRONE_SERVER_HOST=101.34.179.216:8088 \ --publish=8088:80 \ --restart=always \ --detach=true \ --name=drone \ drone/drone
安装Exec Runner 下载Exec Runner 官方有不同架构的版本,这里我准备下载amd64
1 2 curl -L https://github.com/drone-runners/drone-runner-exec/releases/latest/download/drone_runner_exec_linux_amd64.tar.gz | tar zx install -t /usr/local/bin drone-runner-exec
配置Exec Runner 先去etc
新建drone-runner-exec
目录,然后vim config
加入如下配置
1 2 3 4 5 DRONE_RPC_PROTO=http DRONE_RPC_HOST=101.34.179.216:8088 #Drone Server DRONE_RPC_SECRET=super-duper-secret DRONE_LOG_FILE=/root/execrunner/log.txt
安装Exec Runner 1 drone-runner-exec service install
会提示正在安装
1 2 3 read configuration /etc/drone-runner-exec/config installing service drone-runner-exec
然后启动服务drone-runner-exec service start
在日志文件可以看到成功启动的日志
1 2 3 4 time="2021-12-31T10:43:12+08:00" level=info msg="starting the server" addr=":3000" time="2021-12-31T10:43:12+08:00" level=info msg="successfully pinged the remote server" time="2021-12-31T10:43:12+08:00" level=info msg="polling the remote server" capacity=2 endpoint="http://101.34.179.216:8088" kind=pipeline type=exec
完成这几步操作后,Drone
便安装成功了
配置Drone进行发布 我们点击仓库名进入到设置界面,首先便是激活仓库,然后做一些设置
我们在项目目录下新增一个.drone.yml
的配置文件,配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 kind: pipeline type: exec name: default steps: - name: build commands: - docker build -t docker-web . - name: publish commands: - docker run -d --name docker-web -p 8880:80 docker-web
然后提交到gitea中,这是,会触发Drone的构建事件,因为我安装的是 Exec Runner
所以必须在宿主机上安装Git
,否则会拉取代码失败,我第二次构建,可以看到,在publish阶段失败了,
那是因为我之前已经有该容器在运行了,我们来把脚本调整一下,先停止老容器,然后删除掉
1 2 3 4 5 6 7 8 9 10 11 12 13 14 kind: pipeline type: exec name: default steps: - name: build commands: - docker build -t docker-web . - name: publish commands: - docker stop docker-web - docker rm docker-web - docker run -d --name docker-web -p 8880:80 docker-web
修改好了,我们再次提交一下,Drone
会自动构建 这次,Drone已经构建成功,在Docker容器也能看到docker-web
是新启动的
1 2 3 [root@VM-12-3-centos execrunner]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f2ae1b055b3a docker-web "dotnet DockerWeb.dll" About a minute ago Up About a minute 443/tcp, 0.0.0.0:8880->80/tcp, :::8880->80/tcp