前言

最近公司内部项目的发布流程接入了 GitHub Actions,整个领会过程仍是比较夸姣的;本文首要目的是对于没有还触摸过 GitHub Actions服务器操作体系新手,能够运用它快速构建主动检验及打包推送 Docker 镜像等主动化流程。

创立项appear

本文首要以 Go 言语为例,当然其服务器体系他言语也是相似的giti,与言语自身关系不大。

这儿咱们首要在 GitHub 上创立一个项目,编写了几段简略的代码 main.go

var version = "0.0.1"
func GetVersion() string {
reAPPturn versionappointment
}
func main() {
fmt.Println(GetVersion())
}

内容十分简略,仅仅打印了了版别号;一同配套了一个单元检验 main_test.go

func Te服务器的效果stGetVersi宫颈癌on1(t *testing.T) {
tests := []struct {
name sgithub敞开私库tring
want string
}{
{name: "test1", want: "0.0.1"},
}
for _, tt := range tests {
t.Run(tt.name, func(tcicd指的是什么 *testing.T) {
if got := GetVersiocicd 持续集成n(); got != tt.want {
t.Errorf("GetVersion() = %v, want %v", got, tt.want)
}
})
}
}

咱们能够实施 go test 作业该单元检验。

$ go test
PASS
ok      github.com/crossoverJie/go-docker       1.729s

主动检验

当然以上流程彻底可cicd是什么以运用 Actions 主动化搞定。

首选咱们需求在项目根途径创立一个 .github/workflows/*.yml 的配备文件,新增宫颈癌如下内容:

name: go-docker
on: push
jobs:
test:
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main' || s宫颈癌tartsWith(github.ref, 'refs/tags')
steps:
- uses: actions/checkout@v2
- name: Run Unit Tests
run: go test

简略解释下:

  • name 不用多说,是为cicd 持续集成当时作业流创立一个名公积金词。
  • on 指在什么事情下触发,这儿指代码发生 push 时触发,更多事情定义能够参看官方文档:

Events that公积金借款 trigger workflows

  • jobs 则是定义approach使命,这儿只需一个名为 test 的使命。

该使命是作业龚俊ubuntu-latest 的环境cicd持续集成全程下,只需在 main 分支有推送或是有 tag 推送时作业。

作业时会运用 actions/checkout@v2 这个由他人封装好的 Action,当然这儿运用的是由官方供给的拉取代码 Action

  • 基于这个逻辑,咱们可宫颈癌疫苗以活络的共享和运用他人的 Action 来简化流程,这点也是 GitHub Action扩展性十分强的地方。

毕竟的 run 则是作业自己指令,这儿天然便是触发单元cicd与devops 差异检验了。

  • 如果是 Java 便可改为 mvn test.

之后一旦咱们在 main 分支上推送代码,或cicd与devops 差异许有其他分approach支的cicd与devops 差异代码吞并过来时都会主动作业单cicd指的是什么元检验,十分便当。

使用 GitHub Action 主动发布 Docker

使用 GitHub Action 主动发布 Docker

与咱们本地作业效果一起。

主动发布

接下来考虑主动打包 Docker 镜像,一同上传到 Do服务器的效果cker Hubappear;为此首要创立 Dockerfile

FROM golang:1.15 AS builder
AR工商银行G VERSION=0.0.10
WORKDIR /go/src/app
COPY main.go .
RUN go build -o maincicd指的是什么 -ldflags="-X 'main.version=${VERSIOgiteeN}'" main.go
FROM debian:stabgooglele-slim
COPY --工商银行from=builder /go/src/app/main /go/bin/mainCI/CD
ENV PA服务器体系TH="/go/bin:${appearPATH}"
CMD ["main"]公务员考试

这儿运用 ldflags 可在编译期间服务器租借多少钱一年将一些github敞开私库参数传递进打包程服务器序中,比方打包时间、go 版别、git 版别等。

这儿仅仅appleVERSION 传入了 main.version 变量中,这样在作业时就便能取到了。

docker build -t go-dock服务器的效果er:last .
docker run --rm go-docker:0.0.10
0.0.10

接着持续编写 docker.yml 新增主动打包 Docker 以及推送到 docker hub 中。

deploy:
runs-on: ubuntu-latest
needs: test
if: startsWith(githcicd东西ub.ref, 'refs/tags')
steps:
- name: Egitixtract Version
id: version_step
rugithub敞开私库n: |
echo "##cicd的整个流程[set-outgithub敞开私库putapple name=version;]VERappreciateSION=${GITappearanceHUB_REF#$"refs/tags/v"}"
echo "##[set-outgitlabput nagit教程me=version_tag;]$GITHUB_REPOSITORY:${GITHUB_REF#$"refs/tappearags/v"}"
echo "##[set-output name=latest_tag;]$GITHUB_REPOSITORY:latest"

- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Login to DockerHub
uses: docker服务器/login-approachaction@v1
with:
username: ${{ secrets.DOCKER_git指令USER_NAME }}
password: ${{ secrets.DOCKER_ACCESS_TOKENgiti }}
- name: PrepareReg Names
id: read-docker-imcicd是什么age-identifiergithub敞开私库s
run: |
echo VERSION_TAG=$(echo ${{ stegitips.version_step.outputs.version_tag }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV
echo LASTEST_TAG=$(echo ${{ steps.version_step.outputs.latest_tag  }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV

- name: Build and push Docker images
id: docker_build
uses: docker/build-push-a服务器租借多少钱一年ction@v2.3.0
with:
push: true
tags: |
${{env.VERSION_TAG}}
${{env.LASTEST_TAG}}
          build-args: |
${{steps.vappearanceersion公积金提取_approachstep.outputs.version}}

新增了一个 deploy 的 job。

    needs: test
if: startsWith(github.ref, 'refs/tags')

作业的条件是上一步的单测流程跑通,一同有新的 tag 生成时才会触发后续的 steps

name: Login to DockerHub

在这一步中咱们需求登录到 DockerHub,所以首要需求在 GitHub 项目中配备 hub 的 uapplicationser_name 以及 access_服务器地址在哪里看token.

使用 GitHub Action 主动发布 Docker

使用 GitHub Action 主动发布 Docker

配备好后便cicd的整个流程能在 acicd东西ction 中运用该变量了。

使用 GitHub Action 主动发布 Docker

这儿运用的是由 docker 官服务器体系方供CI/CD应的登录appear action(docker/login-action)。

有一点要十分留意,咱们需求将镜像服务器是什么称谓改为小写,否则会上传失利,比方我的称谓中 J 字母是大写的,直接上传时就会报错。

使用 GitHub Action 主动发布 Docker

所以在上传之前先要实施该步骤转换为小写。

使用 GitHub Action 主动发布 Docker

毕竟再用这两个变量上传到 Docker Hubgitee

使用 GitHub Action 主动发布 Docker

使用 GitHub Action 主动发布 Docker

往后只需咱们打上 tag 时,ActiAPPon 就会主动实施单测、构建、上传的github中文官网网页流程。

总结

GitHub Actions 十分活络,你所需求的大部分功用都能在 marketplace 找到现成的直接运用,

比方能够运用 sshapple 登录自己的服务器,实施一些指令或脚本,这样幻想空间就很大了。

运用起来cicd是什么意思就像是搭积木相同,能够很活络的完结自己的需求。

参看链接:

How to Build a CIcicd是什么的缩写/CD Pipeline with Go, GitHub Actions and Docker