CI/CD
CI/CD 是持续集成、持续部署(Continuous Integration and either Continuous Delivery or Continuous Deployment) 的简写。github 在最近的更新中提供了 github actions 用于个人或者企业项目的 CI/CD,并号称 "any language, any cloud"。
本文使用 github actions release 一个简单的 golang 项目用以试用和体验。
示例代码 & 试验推荐 build workflow
// main.go package main import ( "fmt" "github.com/sysu-yunz/go-base/utils" "math" ) func main(){ fs := []float64{1.1, 3.5, 9, 100, 0.89765, math.Pi, math.E} fmt.Println(utils.MaxFloatSlice(fs)) }
调用 go-base/utils 中的 MaxFloatSlice 函数,返回 float64 切片的最大值并打印。使用 go mod 做包管理。 把项目 push 到 github 上,用 actions 用推荐的 Go build workflow 配置文件新建一个项目 workflow, 改名为 build.yml 并 commit。
新建 Release workflow
同步代码后,可以在 repo 的 .github/workflows/build.yml 中看到刚才的内容。
name: build on: push: branches: [ master ] pull_request: branches: [ master ] jobs: build: name: Build runs-on: ubuntu-latest steps: - name: Set up Go 1.x uses: actions/setup-go@v2 with: go-version: ^1.13 id: go - name: Check out code into the Go module directory uses: actions/checkout@v2 - name: Get dependencies run: | go get -v -t -d ./... if [ -f Gopkg.toml ]; then curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh dep ensure fi - name: Build run: go build -v . - name: Test run: go test -v .
name 是 workflow 名,on 设定了触发条件,jobs 说明了本 workflow 完成哪些自动化的工作,steps 中包含了具体的步骤。
我们的目标是自动 release,所以在 build.yml 同级目录下新建 release.yml, 作为另一个 workflow:
name: Release on: create: tags: - v* jobs: release: name: Release on GitHub runs-on: ubuntu-latest steps: - name: Check out code uses: actions/checkout@v1 - name: Validates GO releaser config uses: docker://goreleaser/goreleaser:latest with: args: check - name: Create release on GitHub uses: docker://goreleaser/goreleaser:latest with: args: release env: GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
此 workflow 指明当使用创建版本 tags 的时候用 go releaser 的 docker 镜像发布二进制包。
git tag v0.1.0 git push --tags
执行以下命令,打开 actions 可以看到 workflow 正在执行,执行完后就可以在项目 releases 中发现新的 release 以及 log 了。
Thought
流程简单,社区强大,值得推荐。如果自己写 workflow 配置文件的话需要多参考文档。
https://dev.to/kenessajr/deploy-a-react-app-to-digitalocean-using-github-actions-and-docker-4pln https://digitaloceancode.com/deploying-self-hosted-runners-for-github-actions/