持续集成与持续部署
CI/CD
持续集成(Continuous Integration,简称 CI)是一种软件开发实践,每次集成都通过自动化的构建(包括编译、发布、自动化测试)来验证,从而尽早地发现集成错误。
持续部署(Continuous Deployment,简称 CD)是通过自动化的构建、测试和部署循环来快速交付高质量的产品。
与 Jenkins 不同的是,基于 Docker 的 CI/CD 每一步都运行在 Docker 镜像中,所以理论上支持所有的编程语言。
Drone
开发者只需在项目中包含 .drone.yml
文件,将代码推送到 git 仓库,Drone 就能够自动化的进行编译、测试、发布。
Drone 项目地址:https://github.com/drone/drone
要求
- 拥有公网 IP、域名 (如果你不满足要求,可以尝试在本地使用 Gogs + Drone)
- 域名 SSL 证书 (目前国内有很多云服务商提供免费证书)
- 熟悉 Docker 以及 Docker Compose
- 熟悉 Git 基本命令
- 对 CI/CD 有一定了解
新建 Github 应用
配置 Drone
我们通过 Docker Compose 来启动 Drone,编写 docker-compose.yml
文件如下:
version: '3'
services:
drone-server:
image: drone/drone:0.8-alpine
ports:
- 443:443
# - "${PRO_PUBLIC_IP}:8000:8000"
volumes:
- drone-data:/var/lib/drone/:rw
- ${SSL_PATH}:/etc/certs:rw
restart: always
environment:
- DRONE_SECRET=drone
- DRONE_OPEN=false
- DRONE_ADMIN=${GITHUB_SERNAME}
- DRONE_HOST=${DRONE_HOST}
- DRONE_GITHUB=true
- DRONE_GITHUB_CLIENT=${DRONE_GITHUB_CLIENT}
- DRONE_GITHUB_SECRET=${DRONE_GITHUB_SECRET}
- DRONE_SERVER_CERT=/etc/certs/drone.domain.com.crt
- DRONE_SERVER_KEY=/etc/certs/drone.domain.com.key
drone-agent:
image: drone/agent:0.8-alpine
restart: always
depends_on:
- drone-server
volumes:
- /var/run/docker.sock:/var/run/docker.sock:rw
environment:
- DRONE_SECRET=drone
- DRONE_SERVER=drone-server:9000
dns: 114.114.114.114
volumes:
drone-data:
将其中的变量替换为自己的配置值。
启动 Drone
docker-compose up -d
Drone 关联项目
在 Github 中创建一个 drone-demo
仓库。
打开我们已经部署好的 Drone 网站,使用 GitHub 账号登录,在界面中关联刚刚新建的 drone-demo
仓库。
在本地初始化项目并编写一段 Go 代码 app.go
:
package main
import "fmt"
func main(){
fmt.Printf("Hello World!");
}
编写 .drone.yml
文件:
workspace:
base: /srv/drone-demo
path: .
pipeline:
build:
image: golang:alpine
# pull: true
environment:
- KEY=VALUE
secrets: [key1, key2]
commands:
- echo $$KEY
- pwd
- ls
- CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
- ./app
然后将代码推送到 Github。
查看构建过程及结果
打开部署好的 Drone 网站就可以看到过程和结果:
当然我们也可以把构建结果上传到 GitHub、Docker Registry 、云服务商提供的对象存储,或者生产环境中。
No Comments