前言
公司有使用drone实现自动部署的功能,我想来觉得有趣便在网上查阅资料自己动手部署了一次。在这里打算写篇文章记录所有过程以备后续使用,有需求的朋友可以进行参考。
步骤
1.使用虚拟机搭建Linux环境
我这儿单纯为了练手,直接在Windows上安装VMware来进行操作,正常情况下应该是在Linux上安装Docker然后进行后续操作,如果没有这种情况可以跳过这一步。这里强烈建议使用Linux系统进行部署,不要使用windows安装docker。之前为了偷懒直接使用 Docker-desktop 后来发现安装drone runner时存在环境问题,只有推倒重来。
2.安装Linux系统,由于CentOS已经停止维护了,我这里使用的AlmaLinux进行平替。安装过程省略。
3.查看本机ip
ifconfig
4.使用xshell连接服务器
5.安装docker
6.使用docker compose部署gitlab
version: '3.6'
services:
gitlab:
image: 'gitlab/gitlab-ce:latest'
ports:
- '82:80'
- '8443:443'
volumes:
- '/data/docker-v/gitlab/config:/etc/gitlab'
- '/data/docker-v/gitlab/data:/var/opt/gitlab'
restart: always
container_name: gitlab
7.使用docker compose部署drone
version: '3'
services:
drone-server:
restart: always ## 容器自动重启
ports:
- '5000:80' ## 映射到宿主机的端口
- '5001:443'
volumes:
- /data/docker-v/drone/data:/data
environment:
- DRONE_GITLAB_SERVER=http://192.168.186.128:82
- DRONE_GITLAB_CLIENT_ID=bba84de0338aeb678f7ed11a4bf4e007d9f46ca0eba5cfc94f5d6d8a90c54304 ## gitee中生成的CLIENT ID
- DRONE_GITLAB_CLIENT_SECRET=gloas-27c3252505f28a0b9e470a26978bb3095179ff9754c7037f49caaf1048c64886 ## gitee中生成的SECRET
- DRONE_RPC_SECRET=303b6068fb64fe4296da1f1def6295db ## openssl rand -hex 16 自动生成
- DRONE_SERVER_HOST=192.168.186.128:5000 ## 端口需要和映射至宿主机的一致
- DRONE_SERVER_PROTO=http
- DRONE_USER_CREATE=username:root,admin:true ## gitee中的用户名
- DRONE_LOGS_TEXT=true
- DRONE_LOGS_PRETTY=true
- DRONE_LOGS_COLOR=true
- TZ=Asia/Shanghai
privileged: true
image: drone/drone:2.22.0
container_name: drone
drone-runner:
image: drone/drone-runner-docker:latest
ports:
- '3000:3000'
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- DRONE_RPC_PROTO=http
- DRONE_RPC_HOST=192.168.186.128:5000
- DRONE_RPC_SECRET=303b6068fb64fe4296da1f1def6295db ## 与server服务中保持一致
- DRONE_RUNNER_NAME=docker-worker
- DRONE_RUNNER_CAPACITY=2
privileged: true
restart: always
container_name: drone-runner
8.配置gitlab
9.配置drone
10.编写dockerfile和drone配置
FROM openjdk:8-jre-alpine
MAINTAINER wangliang
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN mkdir -p /app
WORKDIR /app
ADD ./target/demo-0.0.1-SNAPSHOT.jar ./
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk add --update ttf-dejavu fontconfig
CMD java -jar demo-0.0.1-SNAPSHOT.jar
kind: pipeline
type: docker
name: default
steps:
- name: Maven-Build
image: maven:3.6.3-jdk-8
volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设 置
- name: maven_cache
path: /root/.m2 # 将maven下载依赖的目录挂载出来,防止重复下载
commands:
- mvn clean package -DskipTests
when:
branch: devLoop
event: [ push ]
- name: Docker-Build
image: plugins/docker:linux-amd64
pull: if-not-exists
volumes:
- name: socker
path: /var/run/docker.sock
commands:
- docker build -t xxxx/work-wl/drone-test:${DRONE_BUILD_NUMBER} .
- docker stop spring && docker rm spring
- docker run -d -p 8081:8081 --ulimit nofile=1024 --name spring registry.cn-chengdu.aliyuncs.com/work-wl/drone-test:${DRONE_BUILD_NUMBER}
when:
branch: devLoop
event: [ push ]
volumes:
- name: maven_cache
host:
path: /storge/drone/cache
- name: socker
host:
path: /var/run/docker.sock