GitLab在Linux环境中实现持续集成的核心步骤
GitLab Runner是执行.gitlab-ci.yml中定义任务的代理,需先在Linux服务器上安装并注册。
curl -L --output /etc/apt/trusted.gpg.d/gitlab.asc https://packages.gitlab.com/gitlab/gitlab-runner/gpgkey
echo "deb https://packages.gitlab.com/gitlab/gitlab-runner/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/gitlab-runner.list
sudo apt-get update
sudo apt-get install gitlab-runner -y
CentOS/RHEL系统使用:curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
sudo yum install gitlab-ci-multi-runner -y
sudo gitlab-runner register
按提示输入:
https://gitlab.com或自建GitLab地址);shell,适合简单场景;若需容器化,可选docker);ci、deploy,用于匹配项目中的Job标签)。该文件是CI/CD流程的核心,定义阶段(Stages)、**任务(Jobs)**及执行逻辑,需放置在项目根目录。
stages:
- build # 构建阶段(编译、打包)
- test # 测试阶段(单元测试、集成测试)
- deploy # 部署阶段(发布到服务器/容器平台)
build_job:
stage: build
script:
- echo "Building application..."
- mvn clean package # 示例:Maven构建Java项目
artifacts: # 定义产物(供后续Job使用)
paths:
- target/*.jar
expire_in: 1 hour # 产物有效期
test_job:
stage: test
script:
- echo "Running tests..."
- mvn test # 执行单元测试
deploy_job:
stage: deploy
script:
- echo "Deploying to production..."
- scp target/*.jar user@server:/opt/app # 示例:SCP传输到服务器
only: # 触发条件(仅master分支变更时运行)
- master
stages:定义流程顺序(必须包含build→test→deploy或其他自定义阶段);script:每个Job的具体执行命令(如编译、测试、部署);artifacts:将前一阶段的产物传递给后续Job(如构建产物传递给部署Job);only/except:控制Job触发条件(如仅在特定分支、标签或MR时运行)。敏感信息(如服务器密码、API密钥、Docker凭证)不应直接写入.gitlab-ci.yml,需通过GitLab的CI/CD变量管理。
DEPLOY_SERVER_PASSWORD);$VAR_NAME格式引用(如ssh user@server -p $DEPLOY_SERVER_PASSWORD)。git push origin master)或创建合并请求(MR)时,GitLab会自动启动Pipeline。.gitlab-ci.yml中设置when: manual(如部署Job),或在GitLab界面→CI/CD→Pipelines→Run pipeline手动启动。build_job),即可查看详细执行日志(用于排查命令错误)。docker执行器构建、推送镜像,结合Kubernetes部署:deploy_job:
stage: deploy
image: docker:dind # 使用Docker-in-Docker
variables:
DOCKER_HOST: tcp://docker:2375
script:
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
- kubectl apply -f k8s/deployment.yaml # 部署到Kubernetes
node_modules、maven仓库),加速构建:build_job:
cache:
paths:
- .m2/repository/ # Maven缓存
script:
- mvn clean package
通过以上步骤,即可在Linux环境中实现GitLab的持续集成,自动化完成代码构建、测试和部署流程,提升开发效率与代码质量。