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 apt-get update
sudo apt-get install -y curl openssh-server ca-certificates tzdata perl
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
sudo EXTERNAL_URL="http://your-gitlab-domain-or-ip" apt-get install -y gitlab-ce
安装完成后通过浏览器访问 EXTERNAL_URL 完成初始化。二 注册 Runner
sudo gitlab-runner register
# 依次输入:GitLab 实例 URL、注册 Token
# 输入 Runner 描述(如:ubuntu-shell-runner)
# 输入标签(如:ci,deploy;后续作业可用 tags 指定)
# 选择执行器:Shell(简单)或 Docker(推荐隔离环境)
# 如选 Docker,可指定默认镜像(如:alpine:latest)
sudo gitlab-runner register \
--url https://gitlab.com/ \
--registration-token PROJECT_TOKEN \
--executor docker \
--description "ubuntu-docker-runner" \
--tag-list "ci,docker" \
--docker-image "alpine:latest" \
--run-untagged=false \
--locked=false
sudo gitlab-runner list # 查看已注册 Runner
sudo gitlab-runner verify # 校验配置
sudo gitlab-runner restart # 重启服务
注册完成后,Runner 会在 Pipelines 页面自动接单执行作业。三 编写 .gitlab-ci.yml
stages:
- build
- test
- deploy
variables:
NODE_VERSION: "18"
build_job:
stage: build
image: node:$NODE_VERSION
script:
- npm ci
- npm run build --if-present
artifacts:
paths:
- dist/
expire_in: 1 hour
test_job:
stage: test
image: node:$NODE_VERSION
script:
- npm test -- --ci
dependencies:
- build_job
deploy_job:
stage: deploy
image: alpine:latest
before_script:
- apk add --no-cache openssh-client rsync
- mkdir -p ~/.ssh
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- ssh-keyscan -H $DEPLOY_HOST >> ~/.ssh/known_hosts
script:
- rsync -avz --delete dist/ $DEPLOY_USER@$DEPLOY_HOST:$DEPLOY_PATH
environment:
name: production
url: https://$DEPLOY_HOST
only:
- main
四 配置变量与权限
五 运行与排错