前言
最近公司内部项目的发布流程接入了 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指的是什么元检验,十分便当。
与咱们本地作业效果一起。
主动发布
接下来考虑主动打包 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 版别等。
这儿仅仅apple将 VERSION
传入了 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
.
配备好后便cicd的整个流程能在 acicd东西ction 中运用该变量了。
这儿运用的是由 docker 官服务器体系方供CI/CD应的登录appear action(docker/login-action
)。
有一点要十分留意,咱们需求将镜像服务器是什么称谓改为小写,否则会上传失利,比方我的称谓中 J
字母是大写的,直接上传时就会报错。
所以在上传之前先要实施该步骤转换为小写。
毕竟再用这两个变量上传到 Docker Hubgitee。
往后只需咱们打上 tag
时,ActiAPPon
就会主动实施单测、构建、上传的github中文官网网页流程。
总结
GitHub Actions
十分活络,你所需求的大部分功用都能在 marketplace
找到现成的直接运用,
比方能够运用 sshapple
登录自己的服务器,实施一些指令或脚本,这样幻想空间就很大了。
运用起来cicd是什么意思就像是搭积木相同,能够很活络的完结自己的需求。
参看链接:
How to Build a CIcicd是什么的缩写/CD Pipeline with Go, GitHub Actions and Docker