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的持續集成,自動化完成代碼構建、測試和部署流程,提升開發效率與代碼質量。