答案:使用 GitLab CI 部署 .NET 微服务需配置 DOCKER_REGISTRY、CI_REGISTRY_USER、CI_REGISTRY_PASSWORD 和 KUBE_CONFIG 等变量,编写包含 build、test、build-image、deploy 阶段的 .gitlab-ci.yml 文件,结合 Docker 构建镜像并推送到仓库,通过 kubectl 更新 Kubernetes Deployment 实现滚动发布,首次部署后即可自动完成后续构建与部署流程。

使用 GitLab CI 部署 .NET 微服务,核心是编写清晰的 .gitlab-ci.yml 文件,结合 Docker 构建和 Kubernetes 或其他目标环境发布。整个流程包括代码提交触发 CI、构建镜像、推送至镜像仓库,并自动部署到运行环境。
配置 GitLab CI 环境变量
在开始前,确保在 GitLab 项目中设置必要的 CI/CD 变量:
-
DOCKER_REGISTRY:镜像仓库地址,如 registry.gitlab.com
-
CI_REGISTRY_USER 和 CI_REGISTRY_PASSWORD:用于登录镜像仓库(GitLab 默认提供)
-
KUBE_CONFIG:Kubernetes 配置文件内容(base64 编码),用于部署到 K8s 集群
这些变量可在 GitLab 项目的“Settings > CI / CD > Variables”中添加。
编写 .gitlab-ci.yml 实现自动化流程
根目录下创建 .gitlab-ci.yml,定义多阶段流水线:
stages:
- build
- test
- build-image
- deploy
variables:
IMAGE_NAME: $DOCKER_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME
IMAGE_TAG: $CI_COMMIT_SHA
restore:
stage: build
image: mcr.microsoft.com/dotnet/sdk:8.0
script:
- dotnet restore
cache:
key: ${CI_PROJECT_NAME}
paths:
- ./packages
compile:
stage: build
image: mcr.microsoft.com/dotnet/sdk:8.0
script:
- dotnet publish -c Release -o ./publish
artifacts:
paths:
- ./publish
run-tests:
stage: test
image: mcr.microsoft.com/dotnet/sdk:8.0
script:
- dotnet test --no-restore --verbosity normal
build-and-push-image:
stage: build-image
image: docker:24.0.7-cli
services:
- docker:24.0.7-dind
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $DOCKER_REGISTRY
- docker build -t $IMAGE_NAME:$IMAGE_TAG .
- docker push $IMAGE_NAME:$IMAGE_TAG
depends:
- compile
deploy-to-k8s:
stage: deploy
image: bitnami/kubectl:latest
script:
- echo "$KUBE_CONFIG" | base64 -d > kubeconfig.yaml
- export KUBECONFIG=./kubeconfig.yaml
- kubectl set image deployment/${CI_PROJECT_NAME} web=$IMAGE_NAME:$IMAGE_TAG
environment:
name: production
这个配置实现了从还原依赖、编译、测试、构建镜像到部署的完整链路。
准备 Dockerfile 支持微服务打包
确保项目根目录有 Dockerfile,例如:
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime
WORKDIR /app
COPY ./publish .
EXPOSE 80
EXPOSE 443
ENTRYPOINT ["dotnet", "YourMicroservice.dll"]
该文件将 publish 阶段输出的内容复制进容器,形成可运行的微服务镜像。
更新 Kubernetes Deployment 实现滚动更新
首次部署需手动应用 Deployment 和 Service。之后 CI 中通过 kubectl set image 触发滚动更新,实现零停机发布。
Deployment 示例片段:
apiVersion: apps/v1
kind: Deployment
metadata:
name: your-microservice
spec:
replicas: 2
selector:
matchLabels:
app: your-microservice
template:
metadata:
labels:
app: your-microservice
spec:
containers:
- name: web
image: registry.gitlab.com/your-group/your-microservice:latest
ports:
- containerPort: 80
CI 流水线中的 deploy 阶段会更新此 Deployment 的镜像版本。
基本上就这些。只要配置好变量、写好 CI 文件和 Dockerfile,每次推送到主分支就会自动完成构建与部署。关键是保证每个阶段职责清晰,出问题能快速定位。
以上就是如何用 GitLab CI 部署 .NET 微服务?的详细内容,更多请关注php中文网其它相关文章!