GitLab CI/CD 部署流程笔记
获取 URL 和 Token
- 在 GitLab 项目的 Settings > CI / CD 页面,展开 Runners 设置部分,可以找到
URL 和 registration token(用于注册 GitLab Runner 的 token)。这些信息将用于 Runner 注册和配置;
安装并注册 GitLab Runner
- 在想要部署的服务器[服务器、本机]上安装 GitLab Runner,可以通过
Docker、Shell、Kubernetes 等多种执行方式来运行 Runner;
- 下通过Docker命令安装 GitLab Runner:
bash
docker run -d --name gitlab-runner --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest
- 注册 Runner命令连接gitlab项目
bash
gitlab-runner register
- GitLab CI URL: 填入步骤 1 中获得的 GitLab 项目 URL(通常为 gitlab.com 或者你自建 GitLab 实例的 URL)。
- Registration Token: 填入步骤 1 中的 token。
- Runner 的执行方式: 选择适合的执行方式(如
docker、shell 等)。如果使用 Docker,可以指定使用的镜像,例如 docker:latest。
- 标签(Tags) : 如果你在
.gitlab-ci.yml 中指定了标签,这里需要填写相应标签。标签用于让 GitLab 找到对应的 Runner 执行特定的 CI/CD 任务。
- Runner 名称: 可自定义 Runner 名称,以便区分多个 Runner。
- Executor(执行器) : 选择执行方式(如
docker、shell)。如果选择 Docker,则需要设置相应的 Docker 镜像。
配置 .gitlab-ci.yml 文件
yaml
stages:
- build
- deploy
build:
stage: build
script:
- echo "Building the project..."
-
deploy:
stage: deploy
script:
- echo "Deploying the project..."
- rsync -avz --delete ./path/to/project/ user@remote:/path/to/deployment/
only:
- main
- stages: 定义流水线的不同阶段(如构建、测试、部署)。
- build 阶段: 可以执行项目的构建命令(如编译、打包)。
- deploy 阶段: 执行项目的部署命令,例如使用
rsync 将文件同步到远程服务器。
- only: 限制流水线仅在特定分支(例如
main)上运行。
配置 GitLab Runner
- 如果在 CI/CD 流程中使用 Docker,可能需要在
.gitlab-ci.yml 中指定 Docker 镜像。示例:
yaml
image: docker:latest
services:
- docker:dind
before_script:
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY"
- image: 指定 GitLab Runner 使用的基础 Docker 镜像。
- services: 配置服务,例如
docker:dind(Docker in Docker),让 Runner 能够在容器内运行 Docker 命令。
- before_script: 在主要命令之前执行的步骤,例如登录 Docker Registry。
自动化部署和优化
- 环境变量: 可以在 GitLab CI/CD 设置中为项目或组级别配置 CI/CD 环境变量,避免在
.gitlab-ci.yml 中硬编码敏感信息(如服务器 IP、用户名、密码等)。
- 缓存(Cache)与工件(Artifacts) : 使用缓存和工件可以加速构建和部署流程。例如,缓存依赖项或中间构建文件可以避免每次都重新下载或构建。
yaml
cache:
paths:
- node_modules/
artifacts:
paths:
- dist/
其他注意事项
- 并发: GitLab Runner 可以在同一台机器上运行多个 Runner,甚至可以为不同的项目配置多个 Runner 以提高并行处理能力。
- Runner 权限管理: 在 GitLab 中可以为 Runner 设置不同的权限范围,例如是否允许使用共享 Runner 或仅允许项目级别的 Runner。
链接及配置参考
stages:
- install
- build
- deploy
cache:
paths:
- node_modules
- build
build-job:
stage: build
only:
- /^master.*/
script:
- npm config set registry https://registry.npmmirror.com
- npm config get registry
- npm install
- npm run build2
- ls dist/
- "which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )"
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
- ssh root@xx.xx.xxx.xx 'rm -rf /root/projects/pName/dist'
- scp -r dist root@xx.xx.xxx.xx:/root/projects/pName
- rm -rf dist/
- MY_IP=$(hostname -I | awk '{print $1}')
- echo $CI_COMMIT_AUTHOR
- curl -k -X POST -H "Content-Type:application/json" -d "{\"msg_type\":\"post\",\"content\":{\"post\":{\"zh_cn\":{\"title\":\"webname`echo ${CI_COMMIT_BRANCH/tool/}`版本已发布\",\"content\":[[{\"tag\":\"text\",\"text\":\"本次更新内容:`echo ${CI_COMMIT_MESSAGE}`\n\"},{\"tag\":\"a\",\"text\":\"查看\",\"href\":\weburl/\"}]]}}}}" webhookurl