在 Ubuntu 上配置 GitLab CI/CD 的完整步骤
一 环境准备与安装
sudo apt-get update
sudo apt-get install -y curl ca-certificates
curl -L --output /usr/share/keyrings/gitlab-runner-archive-keyring.gpg \
https://packages.gitlab.com/gitlab/gitlab-runner/gpgkey
echo "deb [signed-by=/usr/share/keyrings/gitlab-runner-archive-keyring.gpg] \
https://packages.gitlab.com/gitlab/gitlab-runner/ubuntu $(lsb_release -cs) main" | \
sudo tee /etc/apt/sources.list.d/gitlab-runner.list > /dev/null
sudo apt-get update
sudo apt-get install -y gitlab-runner
sudo systemctl enable --now gitlab-runner
二 注册 GitLab Runner
sudo gitlab-runner register
按提示依次输入:
sudo gitlab-runner list
在 GitLab 项目的 Runners 页面应能看到已注册并 在线 的 Runner。三 创建 GitLab CI/CD 流水线
stages:
- build
- test
- deploy
variables:
NODE_VERSION: "18"
build_job:
stage: build
image: node:$NODE_VERSION
script:
- npm ci --quiet
- npm run build --if-present
artifacts:
paths:
- dist/
expire_in: 1 week
test_job:
stage: test
image: node:$NODE_VERSION
script:
- npm test -- --ci
deploy_job:
stage: deploy
image: docker:24.0
services:
- docker:24.0-dind
variables:
DOCKER_HOST: tcp://docker:2375
DOCKER_TLS_CERTDIR: ""
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"
only:
- main
四 配置 CI/CD 变量与权限
五 部署与常见问题排查
deploy_prod:
stage: deploy
image: alpine:latest
before_script:
- apk add --no-cache openssh
- mkdir -p ~/.ssh
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- ssh-keyscan -H "$SERVER_HOST" >> ~/.ssh/known_hosts
script:
- rsync -avz --delete dist/ "$SERVER_USER@$SERVER_HOST:/var/www/myapp/"
- ssh "$SERVER_USER@$SERVER_HOST" "sudo systemctl restart myapp || true"
only:
- main