内容简介:让我们一起开始实践在这里,我为
Drone是一种基于容器技术的持续交付系统。Drone使用简单的YAML配置文件(docker-compose的超集)来定义和执行 Docker 容器中的Pipelines。 Drone与流行的源代码管理系统无缝集成,包括GitHub,GitHub Enterprise,Bitbucket等。
Drone CI For Github
让我们一起开始实践 Drone
的部署和使用
准备工作
在这里,我为 Drone Server
使用的域名是 dronetest.yiranzai.top
了解Docker-compose
Compose
项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。
写了一个小Demo帮助你更快了解Docker-compose
申请一个Github OAuth Application
Github OAuth Application是为了授权 Drone Server
读取你的 Github
信息。
参照我之前写的Demo 一张图搞定 Github Create an OAuth Application
记下生成的 Client ID
和 Client Secret
编写docker-compose.yml
我们需要
-
drone-server
(中央Drone服务器) -
drone-agent
(接收来自中央Drone服务器的指令以执行构建管道) -
mysql
(drone
默认的数据存储是sqllite3
,这里我们使用MySQL) -
nginx
(使用nginx
来做对外的服务代理,不要让drone-server
直接对外提供服务)
参考:
version: "3.7" services: nginx: image: nginx:alpine container_name: drone_nginx ports: - "80:80" restart: always networks: - dronenet mysql: image: mysql:5.7 restart: always container_name: drone_mysql environment: - MYSQL_ROOT_PASSWORD=root_password - MYSQL_DATABASE=drone - MYSQL_USER=drone - MYSQL_PASSWORD=drone_password networks: - dronenet volumes: - /path/to/conf/my.cnf:/etc/mysql/my.cnf:rw - /path/to/data:/var/lib/mysql/:rw - /path/to/logs:/var/log/mysql/:rw drone-server: image: drone/drone:1.0.0-rc.5 #不要用latest,latest并非稳定版本 container_name: dronetest_server networks: - dronenet volumes: - ${DRONE_DATA}:/var/lib/drone/:rw - /var/run/docker.sock:/var/run/docker.sock:rw restart: always environment: - DRONE_DEBUG=true - DRONE_DATABASE_DATASOURCE=drone:drone_password@tcp(drone_mysql:3306)/drone?parseTime=true #mysql配置,要与上边 mysql 容器中的配置一致 - DRONE_DATABASE_DRIVER=mysql - DRONE_GITHUB_SERVER=https://github.com - DRONE_GITHUB_CLIENT_ID=${Your-Github-Client-Id} #Github Client ID - DRONE_GITHUB_CLIENT_SECRET=${Your-Github-Client-Secret} #Github Client Secret - DRONE_RUNNER_CAPACITY=2 - DRONE_RPC_SECRET=YOU_KEY_ALQU2M0KdptXUdTPKcEw #RPC秘钥 - DRONE_SERVER_PROTO=http #这个配置决定了你激活时仓库中的webhook地址的proto - DRONE_SERVER_HOST=dronetest.yiranzai.top - DRONE_USER_CREATE=username:yiranzai,admin:true #管理员账号,一般是你github用户名 drone-agent: image: drone/agent:1.0.0-rc.5 container_name: dronetest_agent restart: always networks: - dronenet depends_on: - drone-server #依赖drone_server,并在其后启动 volumes: - /var/run/docker.sock:/var/run/docker.sock:rw environment: - DRONE_RPC_SERVER=http://drone_server #drone用的http请求包,url一定要写上协议才能支持 - DRONE_RPC_SECRET=YOU_KEY_ALQU2M0KdptXUdTPKcEw #RPC秘钥,要与drone_server中的一致 - DRONE_DEBUG=true networks: dronenet: 复制代码
运行服务
创建容器和网络
$ docker-compose up -d Creating drone_mysql ... done Creating dronetest_server ... done Creating drone_nginx ... done Creating dronetest_agent ... done $ docker-compose ps Name Command State Ports ---------------------------------------------------------------------------- drone_mysql docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp drone_nginx nginx -g daemon off; Up 0.0.0.0:80->80/tcp dronetest_agent /bin/drone-agent Up dronetest_server /bin/drone-server Up 443/tcp, 80/tcp 复制代码
编写 nginx
配置文件
$ docker-compose exec nginx ash # vim /etc/nginx/conf.d/drone.conf server { listen 80; server_name dronetest.yiranzai.top; location / { proxy_pass http://dronetest_server; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } # nginx -s reload 复制代码
访问服务
先有一个OAuth验证,然后会开始同步你所有的仓库。
写到这里, Drone CI for Github
就已经搭建成功了,是不是很开心,是不是很满足?结束了吗?并没有!
我们还要测试一下 Drone Server
,测试服务的可用性。
说干就干,开搞。
验证服务
没有经过实践的项目不是可用的项目
创建空仓库,并同步到 Drone
激活
仓库怎么创建就不再赘述,在这里,我创建一个名为 dronetest
的仓库,并回到 Drone
同步仓库
- 同步仓库
- 激活仓库
激活以后,检查一下GIthub仓库的Webhooks
-
添加
Secrets
在这里我创建了两个Secret name: yiranzai word: Hello World!
编写 .drone.yml
这里由于服务器配置是敏感信息,我们需要用到 Secret
来存储
事先创建好登陆部署服务器所需要的 host
username
rsa
port
以及要部署的路径 deploy_path
参考
--- kind: pipeline name: drone workspace: base: /app path: git/drone steps: - name: build image: node:alpine volumes: - name: webroot path: /wwwroot commands: - /bin/sh bash.sh environment: host: from_secret: host port: from_secret: port abc: abctest - name: deploy image: appleboy/drone-scp when: status: - success settings: host: from_secret: host port: from_secret: port key: from_secret: rsa username: from_secret: username target: from_secret: deploy_path source: ./* volumes: - name: webroot host: path: /opt - name: cache host: path: /tmp/cache trigger: branch: - master event: - push 复制代码
编写 bash.sh 打印变量
echo $host echo $abc echo $port 复制代码
推到仓库,查看效果
- push to repo
git init git add .;git commit -m 'init test' git remote add origin git@github.com:yiranzai/dronetest.git git push -u origin master 复制代码
- 查看
Drone
的ACTIVITY FEED
如果成功就会如下图所示
如果失败,会有错误信息
这里是由于我用的 node
镜像是 node:alpine
,没有 bash
-
去服务器检查一下
看到
bash.sh
和.drone.yml
都被上传到这里(只是测试,不是真的让你这么干)
$ pwd /home/www $ ll -a total 40 drwx------ 4 www www 4096 Feb 20 04:23 . drwxr-xr-x. 4 root root 4096 Feb 20 03:55 .. -rw------- 1 www www 61 Feb 19 03:00 .bash_history -rw-r--r-- 1 www www 18 Oct 30 13:07 .bash_logout -rw-r--r-- 1 www www 193 Oct 30 13:07 .bash_profile -rw-r--r-- 1 www www 231 Oct 30 13:07 .bashrc -rw-r--r-- 1 www www 35 Feb 20 04:23 bash.sh -rw-r--r-- 1 www www 812 Feb 20 04:23 .drone.yml drwxr-xr-x 8 www www 4096 Feb 20 04:23 .git drwxr-xr-x 2 www www 4096 Feb 19 02:40 .ssh 复制代码
总结
Drone CI for Github的部署到此就真的结束了,一路走来,踩了不少坑,Drone的文档你慢慢看了以后就会发现有多烂,烂到心累想哭,许多在Demo中出现的变量在参考手册中找不到,完全不知道什么含义,只能靠瞎猜和摸索。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- gulp打造前端自动化工作流
- Gulp4 前端自动化工作流配置
- [小团队自动化](二) Drone CI使用Vault作为凭据存储 —— 打造自己的CI/CD工作流
- [JWFD开源工作流]JWFD开源工作流-矩阵引擎设计初步
- 前端工程工作流规范
- SharePoint PowerShell 启动工作流
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。