mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-03-11 04:14:38 +00:00
101 lines
2.1 KiB
Go
101 lines
2.1 KiB
Go
# 21.3 Drone
|
||
|
||
基于 `Docker` 的 `CI/CD` 工具 `Drone`,所有编译、测试的流程都在容器中进行。
|
||
|
||
开发者只需在项目中包含 `.drone.yml` 文件,将代码推送到 git 仓库,`Drone` 就能够自动化地进行编译、测试、发布。
|
||
|
||
本小节以 `GitHub` + `Drone` 来演示 `Drone` 的工作流程。
|
||
当然在实际开发过程中,你的代码也许不在 GitHub 托管,那么你可以尝试使用 `Gogs` + `Drone` 来进行 CI/CD。
|
||
|
||
## 21.3.1 关联项目
|
||
|
||
在 GitHub 新建一个名为 `drone-demo` 的仓库。
|
||
|
||
打开我们已经部署好的 Drone 网站或者 [Drone Cloud](https://cloud.drone.io),
|
||
使用 GitHub 账号登录,在界面中关联刚刚新建的 `drone-demo` 仓库。
|
||
|
||
## 21.3.2 编写项目源代码
|
||
|
||
初始化一个 git 仓库:
|
||
|
||
```bash
|
||
mkdir drone-demo
|
||
cd drone-demo
|
||
|
||
git init
|
||
|
||
git remote add origin git@github.com:username/drone-demo.git
|
||
```
|
||
|
||
这里以一个简单的 `Go` 程序为例,该程序输出 `Hello World!`
|
||
|
||
编写 `app.go` 文件:
|
||
|
||
```go
|
||
package main
|
||
|
||
import "fmt"
|
||
|
||
func main() {
|
||
fmt.Printf("Hello World!\n")
|
||
}
|
||
```
|
||
|
||
编写 `.drone.yml` 文件:
|
||
|
||
```yaml
|
||
kind: pipeline
|
||
type: docker
|
||
name: build
|
||
|
||
steps:
|
||
- name: build
|
||
image: golang:alpine
|
||
pull: if-not-exists
|
||
environment:
|
||
KEY: VALUE
|
||
commands:
|
||
- echo $KEY
|
||
- pwd
|
||
- ls
|
||
- CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
|
||
- ./app
|
||
|
||
trigger:
|
||
branch:
|
||
- master
|
||
```
|
||
|
||
现在目录结构如下:
|
||
|
||
```bash
|
||
.
|
||
├── .drone.yml
|
||
└── app.go
|
||
```
|
||
|
||
## 21.3.3 推送项目源代码到 GitHub
|
||
|
||
```bash
|
||
git add .
|
||
|
||
git commit -m "test drone ci"
|
||
|
||
git push origin master
|
||
```
|
||
|
||
## 21.3.4 查看项目构建过程及结果
|
||
|
||
打开我们部署好的 `Drone` 网站或者 Drone Cloud,即可看到构建结果。
|
||
|
||

|
||
|
||
当然我们也可以把构建结果上传到 GitHub、Docker Registry、
|
||
云服务商提供的对象存储,或者生产环境中。
|
||
|
||
## 21.3.5 参考链接
|
||
|
||
* [Drone Github](https://github.com/drone/drone)
|
||
* [Drone 文档](https://docs.drone.io/)
|
||
* [Drone 示例](https://github.com/docker-practice/drone-demo)
|