# 怎么用Gitlab-CI持續部署到遠程機器
## 前言
在現代軟件開發中,持續集成和持續部署(CI/CD)已成為提升交付效率的關鍵實踐。GitLab-CI作為GitLab內置的持續集成工具,能夠幫助團隊自動化完成代碼構建、測試和部署的全流程。本文將詳細介紹如何利用GitLab-CI將應用持續部署到遠程服務器,涵蓋從基礎配置到高級實踐的完整方案。
## 一、GitLab-CI基礎概念
### 1.1 核心組件
- **Runner**:執行CI/CD作業的輕量級代理程序
- **.gitlab-ci.yml**:定義CI/CD流程的配置文件
- **Pipeline**:由多個階段(stages)組成的工作流
- **Job**:每個階段中的具體執行任務
### 1.2 工作原理
```mermaid
graph LR
A[代碼推送] --> B(觸發Pipeline)
B --> C{執行構建}
C --> D{運行測試}
D --> E[部署到服務器]
在服務器生成SSH密鑰對:
ssh-keygen -t ed25519 -C "gitlab-ci"
將公鑰添加到目標服務器的~/.ssh/authorized_keys
在GitLab項目的CI/CD變量中添加:
SSH_PRIVATE_KEY:私鑰內容SERVER_IP:目標服務器IPDEPLOY_USER:部署用戶名示例.gitlab-ci.yml配置:
deploy_production:
stage: deploy
script:
- mkdir -p ~/.ssh
- echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_ed25519
- chmod 600 ~/.ssh/id_ed25519
- ssh-keyscan $SERVER_IP >> ~/.ssh/known_hosts
- ssh $DEPLOY_USER@$SERVER_IP "cd /var/www/app && git pull && docker-compose up -d"
only:
- main
適合已在服務器部署Docker的環境:
deploy:
image: alpine/ssh
script:
- apk add --no-cache openssh-client
- ssh $USER@$SERVER "bash deploy-script.sh"
deploy:
script:
- curl -X POST https://deploy-api.example.com/trigger \
-H "Authorization: Token $DEPLOY_TOKEN" \
-d '{"ref": "$CI_COMMIT_REF_NAME"}'
stages:
- test
- deploy
deploy_staging:
stage: deploy
environment:
name: staging
url: https://staging.example.com
script:
- ./deploy.sh staging
only:
- develop
deploy_production:
stage: deploy
environment:
name: production
url: https://example.com
script:
- ./deploy.sh production
when: manual
only:
- main
rollback_prod:
stage: deploy
script:
- ssh $DEPLOY_USER@$SERVER "./rollback.sh"
when: manual
deploy:
before_script:
- apt-get update -y && apt-get install -y ansible
script:
- ansible-playbook -i $SERVER_IP, deploy-playbook.yml
密鑰管理:
網絡防護:
審計日志: “`yaml deploy: script:
- echo "$(date): Deployed by $GITLAB_USER_NAME" >> /var/log/deploy.log
”`
測試SSH連接:
ssh -T -i ~/.ssh/id_ed25519 $USER@$SERVER
檢查服務器日志:
tail -f /var/log/auth.log
驗證GitLab Runner權限
variables:
SSH_OPTS: "-o ConnectTimeout=30 -o ServerAliveInterval=60"
添加清理任務:
cleanup:
script:
- ssh $SERVER "docker system prune -f"
參考配置結構:
├── .gitlab-ci.yml
├── deploy/
│ ├── staging.sh
│ └── production.sh
└── ansible/
├── inventory
└── playbook.yml
通過GitLab-CI實現自動化遠程部署可以顯著提升交付效率,但需要注意安全防護和異常處理。建議從簡單部署開始,逐步實現多環境、藍綠部署等高級方案。實際配置時,應根據項目需求選擇合適的部署策略,并建立完善的監控和回滾機制。
提示:GitLab 15.0+版本提供了更強大的部署功能,建議查看官方文檔獲取最新特性。 “`
(全文約1750字)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。