21_case_devops/21.1_devops_workflow.md
本章将演示一个基于 Docker、Kubernetes 和 Jenkins/GitLab CI 的完整 DevOps 工作流。
本节通过一组最小可用的片段,展示典型 DevOps 流程中与 Docker 相关的关键配置。
使用 Docker 多阶段构建可以有效减小镜像体积。
## Build stage
FROM golang:1.26 AS builder
WORKDIR /app
COPY . .
RUN go build -o main .
## Final stage
FROM alpine:3.21
WORKDIR /app
COPY --from=builder /app/main .
CMD ["./main"]
GitLab CI(.gitlab-ci.yml)配置如下:
stages:
- test
- build
- deploy
unit_test:
stage: test
image: golang:1.26
script:
- go test ./...
build_image:
stage: build
image: docker:29
services:
- docker:29-dind
script:
- echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin $CI_REGISTRY
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
deploy_staging:
stage: deploy
image: dtzar/helm-kubectl
script:
- kubectl config set-cluster k8s --server=$KUBE_URL --insecure-skip-tls-verify=true
- kubectl config set-credentials admin --token=$KUBE_TOKEN
- kubectl config set-context default --cluster=k8s --user=admin
- kubectl config use-context default
- kubectl set image deployment/myapp myapp=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
-n staging
only:
- develop
toomanyrequests 错误。