Linux环境下GitLab实现自动化部署的核心流程
GitLab通过CI/CD(持续集成/持续部署)功能实现自动化部署,核心依赖GitLab Runner(执行任务的代理)和**.gitlab-ci.yml**(流水线配置文件)。以下是详细步骤:
GitLab Runner是执行.gitlab-ci.yml中任务的组件,需先在Linux服务器(部署目标环境)上安装并注册。
# 安装依赖
sudo yum install -y curl policycoreutils-python openssh-server postfix
# 启动Postfix(用于邮件通知)
sudo systemctl enable postfix && sudo systemctl start postfix
# 添加GitLab Runner仓库并安装
curl -sS https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
sudo yum install -y gitlab-runner
sudo gitlab-runner register
注册成功后,Runner会监听GitLab触发的流水线任务。在项目根目录下创建.gitlab-ci.yml,定义流水线阶段(build/test/deploy)和作业(Job),明确每个阶段的执行任务。
stages:
- build # 构建阶段:编译代码、打包
- test # 测试阶段:运行单元测试
- deploy # 部署阶段:推送至服务器
variables:
MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository" # Maven本地仓库路径
IMAGE_TAG: "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA" # Docker镜像标签(用提交短哈希)
cache: # 缓存依赖,加速后续构建
paths:
- .m2/repository/
- target/
build-job:
stage: build
image: maven:3.8.6-jdk-11 # 使用Maven镜像
script:
- mvn clean package -DskipTests # 编译并打包(跳过测试)
artifacts: # 保存构建产物,供后续阶段使用
paths:
- target/*.jar
unit-test:
stage: test
image: maven:3.8.6-jdk-11
script:
- mvn test # 运行单元测试
docker-build:
stage: deploy
image: docker:20.10.23 # 使用Docker镜像
services:
- docker:dind # 启用Docker-in-Docker(构建镜像)
script:
- docker build -t $IMAGE_TAG . # 构建Docker镜像
- docker push $IMAGE_TAG # 推送镜像至GitLab Registry
配置项说明:
stages:定义流水线阶段顺序(必须按顺序执行);script:每个Job的执行命令;artifacts:将构建产物(如JAR文件)传递给后续Job;cache:缓存依赖目录,减少重复下载;variables:定义全局变量(如镜像标签)。若部署作业需要通过SSH连接到目标Linux服务器(如拉取代码、重启服务),需配置免密登录,避免在配置文件中暴露私钥。
ssh-keygen -t rsa -b 4096 -C "gitlab-runner" # 默认保存至~/.ssh/id_rsa
ssh-copy-id user@target-server-ip # 将公钥添加至目标服务器的~/.ssh/authorized_keys
DEPLOY_SSH_PRIVATE_KEY(类型为File,值为目标服务器私钥),然后在Job中引用:deploy-job:
stage: deploy
script:
- mkdir -p ~/.ssh
- echo "$DEPLOY_SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- ssh user@target-server-ip "cd /deploy/path && git pull && systemctl restart app.service"
master/main)或创建合并请求时,GitLab会自动触发流水线。.gitlab-ci.yml中为Job添加when: manual,或在GitLab项目→CI/CD→Pipelines页面点击“Run Pipeline”。k8s-deploy:
stage: deploy
image: bitnami/kubectl:latest # 使用kubectl镜像
script:
- echo "$KUBECONFIG" > ~/.kube/config # 从变量读取Kubeconfig(配置K8s集群访问)
- kubectl set image deployment/app app=$IMAGE_TAG --namespace=prod # 更新K8s Deployment镜像
node_modules(Node.js项目)、.m2/repository(Maven项目)等目录,减少构建时间。after_script,通过邮件、Slack或Webhook发送部署结果通知。only/except或rules控制Job执行环境(如develop分支触发测试环境部署,master分支触发生产环境部署)。通过以上步骤,可实现Linux环境下GitLab的自动化部署,覆盖从代码提交到生产环境发布的全流程,提升开发效率和部署可靠性。