持续集成与持续部署


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 、云服务商提供的对象存储,或者生产环境中。


点赞 取消点赞 收藏 取消收藏

<< 上一篇: 操作系统

>> 下一篇: 没有下一篇了