在 Debian 上使用 GitLab CI/CD 的完整实践
一 环境准备与 Runner 安装
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
sudo apt update && sudo apt install -y gitlab-runner
sudo gitlab-runner register \
--url https://gitlab.com/ \
--registration-token YOUR_REGISTRATION_TOKEN \
--executor shell \
--description "Debian Runner" \
--tag-list "ci,linux"
sudo systemctl start gitlab-runner
sudo systemctl enable gitlab-runner
sudo gitlab-runner status # 应显示为 running
二 编写 .gitlab-ci.yml 与触发流水线
stages:
- build
- test
- deploy
variables:
PROJECT_NAME: "my-debian-app"
DOCKER_IMAGE: "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA"
build_job:
stage: build
image: maven:3.9-openjdk-17 # 示例:使用容器化环境
script:
- ./mvnw package -DskipTests
artifacts:
paths:
- target/*.jar
expire_in: 1 hour
test_job:
stage: test
image: maven:3.9-openjdk-17
script:
- ./mvnw test
needs: ["build_job"]
deploy_job:
stage: deploy
image: alpine:latest
before_script:
- apk add --no-cache openssh-client
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- ssh-keyscan production-server >> ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
script:
- scp target/*.jar user@production-server:/opt/apps/
- ssh user@production-server "systemctl restart my-app.service"
only:
- main
needs: ["test_job"]
三 远程部署与敏感信息管理
ssh-keygen -t rsa -b 4096 -C "gitlab-ci@debian-runner"
四 性能优化与安全加固
cache:
paths:
- .m2/repository/
- node_modules/
key: ${CI_COMMIT_REF_SLUG}