以下操作都基于阿某云下的服务器和域名,没有服务器和域名的能不能搞,我没试过!
安装Docker
在开始安装之前,需要安装 device-mapper-persistent-data
和 lvm2
两个依赖。
device-mapper-persistent-data
是 Linux
下的一个存储驱动, Linux
上的高级存储技术。 Lvm
的作用则是创建逻辑磁盘分区。这里我们使用 CentOS
的 Yum
包管理器安装两个依赖:
yum install -y yum-utils device-mapper-persistent-data lvm2
复制代码
依赖安装完毕后,我们将阿里云的 Docker
镜像源添加进去。可以加速 Docker
的安装。
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce -y
复制代码
安装完毕,我们就可以使用 systemctl
启动来启动 Docker
了。systemctl
是 Linux
的进程管理服务命令,他可以帮助我们启动 docker
systemctl start docker
systemctl enable docker
复制代码
接着执行一下 docker -v
,这条命令可以用来查看 Docker
安装的版本信息。当然也可以帮助我们查看 docker
安装状态。如果正常展示版本信息,代表 Docker
已经安装成功。
配置 Github OAuth
Client ID 和 Client Secret需要复制存下来,Client Secret生成之后就隐藏起来了,所以最好复制粘贴到小本本上。
openssl 生成共享密钥
openssl rand -hex 16
bea26a2221fd8090ea38720fc445eca6
复制代码
安装drone
docker pull drone/drone:2
复制代码
运行drone
docker run \
--volume=/var/lib/drone:/data \
--env=DRONE_GITHUB_CLIENT_ID=your-id \ #github里的id
--env=DRONE_GITHUB_CLIENT_SECRET=super-duper-secret \ # github生成的密钥
--env=DRONE_RPC_SECRET=super-duper-secret \ # 这是用openssl生成的共享密钥
--env=DRONE_SERVER_HOST=drone.company.com \ # 这个地址就是drone的可视化操作网页的地址,如果下面不是80端口,应该是这样 drone.company.com:3333
--env=DRONE_SERVER_PROTO=https \ # 没有证书的话 这里也是http
--publish=80:80 \ # 80端口一般留给nginx 可以换一个 3333:80
--publish=443:443 \ # 一般也没配置https这个可以删了
--env=DRONE_USER_CREATE=username:yourname,admin:true # 这个很重要,后面会用到
--restart=always \
--detach=true \
--name=drone \ # 容器的名称
drone/drone:2 # 刚下载的drone镜像
复制代码
到这里访问你配置的DRONE_SERVER_HOST
就可以看到页面了: 如果看不到仓库列表,可以点一下右上角的SYNC
按钮,同步一下。
Webhooks
在Github的仓库设置里可以检查一下Webhooks
。
其实整个流程和jenkins
很像,向代码仓库提交代码更新时,就会自动触发Webhooks
,然后Drone
就会从代码仓库Clone
代码,再通过这个.drone.yml
(相当于java
使用的pom.xml
文件)配置,执行相应的流水线操作。
安装runner
安装runner
镜像
docker pull drone/drone-runner-docker:1
复制代码
运行runner
docker run --detach \
--volume=/var/run/docker.sock:/var/run/docker.sock \
--env=DRONE_RPC_PROTO=https \ # 这是视情况而定
--env=DRONE_RPC_HOST=drone.company.com \ # 这就是上面配置的drone.company.com:3333
--env=DRONE_RPC_SECRET=super-duper-secret \ # openssl生成的密钥
--env=DRONE_RUNNER_CAPACITY=2 \
--env=DRONE_RUNNER_NAME=my-first-runner \
--publish=3000:3000 \
--restart=always \
--name=runner \
drone/drone-runner-docker:1
复制代码
可以通过docker logs
查看日志
docker logs runner # runner就是上面设置的 --name=runner 可以修改
INFO[0000] starting the server INFO[0000] successfully
pinged the remote server
复制代码
Github新建一个测试仓库
可以用现成的也可以新建一个,这里不赘述。
激活仓库
在Drone
上找到对应的仓库settings
激活并保存。
如果上面没配
DRONE_USER_CREATE
,是看不到trusted
的,这样你push
代码,构建就会提示untrusted
不被信任。
.drone.yml文件
配置ssh_host 和 ssh_password
Drone
保证了安全访问,我们不用在配置文件明文输出密码等敏感值,可以添加 Secret
,如果觉得没有必要也不用添加,直接在后面的 drone.yml
文件中配置明文密码就行。
host
配置你的服务器公网ip: password
配置你ssh登录服务器的密码
编写yml文件
本人在yml文件配置这块,可以看一下官方文档:docs.drone.io/pipeline/ov… 下面是网上找的一份配置,放到你的仓库不一定能用,但这份配置示例是一个比较完善的步骤,依样画葫芦吧!
kind: pipeline
type: docker
name: vite-vue3
trigger:
branch:
- master
steps:
# 使用缓存
- name: restore-cache
image: drillster/drone-volume-cache
settings:
restore: true
mount:
- ./node_modules
volumes:
- name: node_cache
path: /cache
# 打包
- name: build
image: node:16
commands:
- node -v
- yarn -v
- yarn config set registry https://registry.npm.taobao.org -g
- yarn config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/ -g
- yarn
- yarn run build
# 更新缓存
- name: rebuild-cache
image: drillster/drone-volume-cache
settings:
rebuild: true
mount:
- ./node_modules
volumes:
- name: node_cache
path: /cache
# 部署
- name: deploy
image: appleboy/drone-scp
settings:
host:
from_secret: ssh_host # 这里就是上面配的secret,也可以明文
username: root # 登录名
password:
from_secret: ssh_password # 登录密码
command_timeout: 3m
# 设置要将打包户的文件部署到的文件地址
target: /usr/share/nginx/html # 把项目拷贝到target目录
source: dist/* # 打包后的那个目录
rm: true
strip_components: 1
when:
status:
- success
volumes:
- name: node_cache
host:
path: /data/node
复制代码
打包有时候会出现node内存超出的问题:可以设置max_old_space_size
vue-cli-service build --max_old_space_size=4096
复制代码
小提示,如果对
drone
和yml
文件语法不熟,可以只留下"部署"那一步流程,你本地打包把dist
文件push
到仓库,就可以很快的体验到“半自动化部署”的快感哦!
如果Docker配错了
docker ps -a # 查看所有容器
docker stop name/id # 通过id或者name 停止这个容器
docker rm name/id # 把它删了重来
复制代码