在CentOS7上安装Drone搭建CI持续集成环境
文章目录
- 在CentOS7上安装Drone搭建CI持续集成环境
- 前言
- 安装前规划
- 安装过程
- 配置域名解析
- 安装Docker
- 拉取Drone Server镜像
- 添加GitHub OAuth Application
- 生成Drone RPC secret
- 启动Drone Server
- 配置Nginx反向代理到Drone Server
- 为Drone站点配置HTTPS
- 测试Drone Server
- 安装和运行Drone Runner
- 激活项目
- 测试Drone Pipeline
- 测试Drone Pipeline for Java
- 在生产上安装Drone
- 使用Docker Compose来安装Drone
- 使用PostgresSQL替换默认内置的sqllite
- 让Drone运行在集群中,可以支持多个Job同时构建
- 让Drone构建时使用Maven local repo加快构建
- 集成消息通知插件
- Drone特色功能
- 在代码库中显示构建状态
- 方便地支持多分支构建
- Drone限制
- 不能手工触发构建,只能自动触发构建
- Troubleshooting
- Active repository validation failure
- 代码变更后,没有自动触发Drone构建
- untrusted repositories cannot mount host volumes
- 参考文档
在CentOS7上安装Drone搭建CI持续集成环境
前言
在玩过GitLab + Jenkins后,最近准备来学习Drone CI/CD,看这个云原生的CI Server能给我们带来什么惊喜。
安装前规划
- 测试服务器:CentOS7 64位,有互联网访问权限,有root权限;
- 代码仓库:考虑到已经非常熟悉GitLab和测试服务器资源有限,这次直接采用GitHub;
- CI Server:本次的主角 Drone CI/CD,采用最简单的Docker安装方式;
- 域名:在我个人网站上规划一个二级域名
drone.xdevops.cn
- HTTPS:因为要使用GitHub OAuth,必须使用HTTPS;
- Nginx:使用Nginx来做二级域名的反向代理;
- Pipeline:使用最简单的Drone Docker Pipeline;
- 测试项目:使用我GitHub上的一个Java示例项目,主要测试Spring Boot的REST API功能;
安装过程
配置域名解析
增加一条域名解析的A记录,将drone.xdevops.cn
解析到服务器的公网IP。
安装Docker
使用阿里云Docker Yum源在线安装Docker:
#!/usr/bin/env bash# remove docker
sudo yum remove -y docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# Step 3: 更新并安装 Docker-CE
sudo yum makecache fastsudo yum install -y docker-ce docker-ce-cli containerd.io# Step 4: 开启Docker服务
sudo systemctl enable docker
sudo systemctl start docker
参见:
- CentOS7用阿里云Docker Yum源在线安装Docker
拉取Drone Server镜像
docker pull drone/drone:1
添加GitHub OAuth Application
登录GitHub;
打开用户设置(Settings),打开Developer settings / OAuth Apps;
新建一个OAuth App,输入相关信息,比如:
# Application name xdevops-drone# Homepage URL https://drone.xdevops.cn# Authorization callback URL https://drone.xdevops.cn/login
复制Client ID和Client Secret,后面启动Drone Server时需要用到。
生成Drone RPC secret
生成Drone Server和Drone Runner的RPC通信用的secret:
openssl rand -hex 16
启动Drone Server
创建一个start_drone_github_server.sh
脚本用来启动Drone Server for GitHub:
#!/usr/bin/env bashdocker run \--volume=/var/lib/drone:/data \--env=DRONE_GITHUB_CLIENT_ID={{DRONE_GITHUB_CLIENT_ID}} \--env=DRONE_GITHUB_CLIENT_SECRET={{DRONE_GITHUB_CLIENT_SECRET}} \--env=DRONE_RPC_SECRET={{DRONE_RPC_SECRET}} \--env=DRONE_SERVER_HOST=drone.xdevops.cn \--env=DRONE_SERVER_PROTO=https \--env=DRONE_USER_CREATE=username:{{DRONE_ADMIN}},machine:false,admin:true \--publish=9080:80 \--publish=9443:443 \--restart=always \--detach=true \--name=drone \drone/drone:1
说明:
{{DRONE_GITHUB_CLIENT_ID}}
和{{DRONE_GITHUB_CLIENT_SECRET}}
为GitHub OAuth App的Client ID和Client Secret;{{DRONE_RPC_SECRET}}
为上面生成的Drone RPC secret;DRONE_SERVER_HOST
为Drone Server的域名或IP,这里使用域名,注意域名前面不要写http://
或https://
;{{DRONE_ADMIN}}
为Drone系统管理员的账号,在这个例子中为GitHub账号;--publish=9080:80
和--publish=9443:443
将容器内的80和443端口映射为服务器的9080和9443端口。
运行bash start_drone_github_server.sh
来启动Drone Server。
配置Nginx反向代理到Drone Server
在/etc/nginx/conf.d
下创建drone.xdevops.cn.conf
配置文件:
upstream drone_server {server 127.0.0.1:9080;
}server {listen 80;listen [::]:80;server_name drone.xdevops.cn;location / {proxy_set_header X-Forwarded-For $remote_addr;proxy_set_header X-Forwarded-Proto $scheme;proxy_set_header Host $http_host;proxy_pass http://drone_server;proxy_redirect off;proxy_http_version 1.1;proxy_buffering off;chunked_transfer_encoding off;}
}
重新加载Nginx配置:
nginx -t
nginx -s reload
在浏览器中访问http://drone.xdevops.cn,验证是否可以正常访问。
为Drone站点配置HTTPS
因为GitHub OAuth需要HTTPS,因此还需要为Drone站点配置HTTPS。
如果已经安装了certbot并且之前已经为Nginx的其它站点配置过HTTPS,只需要运行下面的命令来为Drone站点配置HTTPS:
sudo certbot --nginx -d drone.xdevops.cn
再验证站点的HTTPS证书:
- https://www.ssllabs.com/ssltest/analyze.html?d=drone.xdevops.cn
再在浏览器中打开https://drone.xdevops.cn来验证是否可以正常访问,以及浏览器是否正常识别HTTPS证书。
参见:
- 在CentOS7上使用Letsencrypt为Nginx站点配置HTTPS
测试Drone Server
在浏览器中打开https://drone.xdevops.cn;
首次打开,需要登录GitHub账号来同意授权Drone访问你的GitHub;
安装和运行Drone Runner
采用Docker方式来运行Drone Runner。
拉取Drone Runner的Docker镜像:
docker pull drone/drone-runner-docker:1
创建start_drone_docker_runner.sh
脚本来运行Drone Runner:
#!/usr/bin/env bashdocker run -d \-v /var/run/docker.sock:/var/run/docker.sock \-e DRONE_RPC_PROTO=https \-e DRONE_RPC_HOST=drone.xdevops.cn \-e DRONE_RPC_SECRET={{DRONE_RPC_SECRET}} \-e DRONE_RUNNER_CAPACITY=2 \-e DRONE_RUNNER_NAME=runner1 \-p 3000:3000 \--restart always \--name drone-runner \drone/drone-runner-docker:1
说明:
{{DRONE_RPC_SECRET}}
为上面生成的Drone RPC secret;DRONE_SERVER_HOST
为Drone Server的域名或IP,这里使用域名,注意域名前面不要写http://
或https://
;
运行bash start_drone_docker_runner.sh
来启动Drone Runner。
激活项目
- 在Drone中激活需要构建的GitHub项目;
- 在Drone中,打开项目的Settings,设置Project visibility为Private。
测试Drone Pipeline
在项目的根目录下创建.drone.yml
,并push到GitHub。
kind: pipeline
type: docker
name: defaultsteps:- name: greetingimage: alpinecommands:- echo Hello, Drone!- echo Happy Sunday!
在Drone中查看是否会自动触发构建,并查看构建结果和日志。
测试Drone Pipeline for Java
修改项目根目录下的.drone.yml
,并push到GitHub。
kind: pipeline
type: docker
name: ci-java8steps:- name: buildimage: maven:3-jdk-8commands:- mvn install -s settings.xml -B -U
在Drone中查看是否会自动触发构建,并查看构建结果和日志。
测试项目的根目录有一个settings.xml,用来指向阿里云Maven repo来拉取Maven依赖。
在生产上安装Drone
和上面的安装过程相似,但是需要考虑Drone的性能和高可用。
使用Docker Compose来安装Drone
TODO
使用PostgresSQL替换默认内置的sqllite
TODO
让Drone运行在集群中,可以支持多个Job同时构建
TODO
让Drone构建时使用Maven local repo加快构建
- 使用Drone系统管理员账号(参见Drone Server中的
DRONE_USER_CREATE
参数配置)登录Drone; - 打开Repository的Settings,在Project Settings中勾选“Trusted” (没有看到Trusted选项,说明Drone Server中没有配置正确的
DRONE_USER_CREATE
参数和指定正确的Drone系统管理员账号); - 在
.drone.yml
中定义服务器上的持久卷目录(比如/mnt/data/maven_local_repo
),将容器内的Maven local repo (默认为/root/.m2
) 挂载到服务器上的该目录,示例:
kind: pipeline
type: docker
name: ci-java8volumes:- name: maven_local_repohost:path: /mnt/data/maven_local_reposteps:- name: buildimage: maven:3-jdk-8volumes:- name: maven_local_repopath: /root/.m2commands:- mvn install -s settings.xml -B -U
集成消息通知插件
Drone通过插件可以在流水线中集成消息通知,比如邮件通知、钉钉通知、微信通知和企业微信通知,另外也可以支持Slack通知和RocketChat通知。
参见:
用Mailgun方式在Drone pipeline中集成SMTP邮件通知
Drone特色功能
在代码库中显示构建状态
将Drone提供的一段Markdown代码段放在项目的README.md中,就可以在代码库中显示代码构建状态:
[![Build Status](https://drone.xdevops.cn/api/badges/cookcodeblog/gs-rest-service-maven/status.svg)](https://drone.xdevops.cn/cookcodeblog/gs-rest-service-maven)
方便地支持多分支构建
与Jenkins相比,Drone可以更方便地支持多分支构建,只要将.drone.yml
文件放在该分支下,对该分支的改动会自动触发使用该分支下的.drone.yml
来构建。
Drone限制
不能手工触发构建,只能自动触发构建
Drone不支持手工触发构建,只能自动触发构建(发生变更时,代码库通过Webhook通知Drone)。
但是可以在Drone中重跑(Restart)已有的构建。
参见:
- https://discourse.drone.io/t/builds-are-not-being-triggered/340
Troubleshooting
Active repository validation failure
问题:在Drone中激活项目失败
原因:浏览器F12调试时,发现HTTP 500错误,并且Remote Address为127.0.0.1:10808。
解决方法:
- 修改Drone Server的启动参数,指定正确的DRONE_SERVER_HOST和DRONE_SERVER_PROTO,比如:
--env=DRONE_SERVER_HOST=drone.xdevops.cn \
--env=DRONE_SERVER_PROTO=https \
- 重启Drone Server。
代码变更后,没有自动触发Drone构建
确保已经在代码库中编写了
.drone.yml
(注意不是.drone.yaml
);确保已经安装和运行了Drone Runner;
打开GitHub上的项目,打开Settings / Webhooks,检查是否有Webhook触发失败的记录,并手工更正Webhook的配置错误;
Drone不支持手工触发,如果修改配置后,需要再次push代码才能触发构建。
untrusted repositories cannot mount host volumes
- 确保Drone的Repository Settings的Project settings中已经勾选了“Trusted”;
- 如果没有看到“Trusted”选项,检查Drone Server的启动配置参数中有没有配置了正确的
DRONE_USER_CREATE
参数,并指定了正确的Drone系统管理员账号:
--env=DRONE_USER_CREATE=username:{{DRONE_ADMIN}},machine:false,admin:true \
如果Drone连接GitHub,则{{DRONE_ADMIN}}
为GitHub账号。
参见:
- https://docs.drone.io/server/reference/drone-user-create/
- https://docs.drone.io/server/user/admin/
参考文档
- https://docs.drone.io/server/provider/github/
- https://docs.drone.io/quickstart/docker/
- https://docs.drone.io/pipeline/docker/overview/
- https://0-8-0.docs.drone.io/setup-with-nginx/
- 在Ubuntu上安装Drone持续集成环境
- How To Install and Configure Drone on Ubuntu 16.04
在CentOS7上安装Drone搭建CI持续集成环境相关推荐
- centos下搭建Jenkins持续集成环境(安装jenkins)
centos下搭建Jenkins持续集成环境(安装jenkins) 1.安装JDK yum install -y java 2.安装jenkins 添加Jenkins库到yum库,Jenkins将从这 ...
- Jenkins 搭建C++持续集成环境
简介 本文主要介绍如何通过 Jenkins 搭建 C++的持续集成环境.最后达到的效果是每天00:00 - 08:00之间构建.测试和打包一次工程. 开发环境为 VS2015,测试工具为 CppUni ...
- CI持续集成环境搭建(3)--git的安装与搭建
https://blog.51cto.com/superleedo/2057841 1. 安装git *Note:不要用yum安装git, yum源安装git最新版本是1.8.3,该版本太老,之后用g ...
- windows下使用Jenkins搭建CI持续集成平台(版本源码管理使用SVN)
首先从官网http://jenkins-ci.org/下载 Java Web Archive (.war) 例如我保存到 D:\jenkins\jenkins.war 运行Jenkins需要JRE的支 ...
- 搭建Jenkins持续集成环境
目录 Jenkins介绍 Jenkins使用场景 安装Jenkins,以war包安装为例 1. 下载Jenkins 2. 启动Jenkins,初始化Jenkins Jenkins介绍 Jenkins提 ...
- jenkins下搭建c++持续集成环境
运行环境为centos 5.8 1.下载tomcat,并解压 2.下载jenkins,把jenkins.war放到tomcat的webapp目录下 3.在tomcat的bin目录下执行./startu ...
- 在 CentOS 7 上搭建 Jenkins + Maven + Git 持续集成环境
本文以部署 Spring boot + Maven 项目为例,使用码云作为代码托管仓库,在 CentOS 7 上搭建 Jenkins 持续集成环境. 1. 准备工作 1.1 安装 Java 环境 Je ...
- Jenkins+Maven+SVN快速搭建持续集成环境
Jenkins是一个可扩展的持续集成引擎,Jenkins非常易于安装和配置,简单易用,下面看看我们是如何几分钟就快速搭建一个持续集成环境吧. 假设我们目前已经有2个maven项目:entities(J ...
- GitLab 与 Jenkins 结合构建持续集成环境
持续集成概述及运行流程 CI/CD介绍 把开发工作流程分为以下几个阶段: 编码 → 构建 → 集成 → 测试 → 交付 → 部署 正如你在上图中看到,持续集成(Continuous Integrati ...
最新文章
- 中国百万美元富翁财富
- 喜报!清华社《晓肚知肠:肠菌的小心思》荣获“2018年度中国好书”奖
- 用Eclipse 开发Dynamic Web Project应用程序
- Mybatis解析动态sql原理分析
- java 获取操作系统临时目录_获取当前操作系统的临时目录对象或者地址
- celery java_Celery详解
- ps ico插件_Photoshop 2020特别版 内置多款实用插件
- python字典和集合对象可以进行索引操作_python字典和列表的高级应用
- 东方财富代码选股_东方证券APP评测:智能选股方面优秀 投顾服务缺失
- MySQL/MariaDB Tips
- excelexportentity中设置null不显示的方法_如何在 Creator3D 中切换模型贴图,超级简单!...
- 服务器系统安装蓝牙驱动,win2008蓝牙驱动的装配教程详解
- linux系统用虚拟光驱装win7,用虚拟光驱加载win7或者xp iso镜像文件安装系统的图解步骤...
- hprose php用户手册,Laravel Hprose RPC 服务
- 奈奎斯特采样定理—以二维图像为例
- 7-6 输出大写英文字母分数 (15分)
- 自动钉木箱机器人_一种全自动木箱钉装机的制作方法
- cad线段总和lisp_求一个线段长度总和与生成文本 - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...
- JUC-II CPU的微程序设计 计算机组成原理课程设计 微指令编码
- [转]读懂美国大使馆发布的空气质量指数