CI/CD集成实战分享:从配置到部署的那些坑和技巧
CI/CD集成踩坑记:从零到一的折腾
最近在搞一个新的项目,决定上一套完整的CI/CD流程。本来以为挺简单的,结果发现还是有很多坑要踩。
折腾半天发现GitLab Runner配置有问题
一开始,我按照官方文档配置了GitLab Runner,但是每次提交代码后,CI流水线总是失败。看了下日志,发现是Runner的配置出了问题。
这里我踩了个坑,原来是我忘了给Runner注册一个token。后来试了下发现,只要在GitLab项目的Settings里找到Runners,然后用命令行注册一下就好了:
sudo gitlab-runner register --url https://gitlab.com/ --registration-token <your_token> --executor docker --description "My Docker Runner"
这样就解决了Runner的问题,CI流水线终于跑起来了。
环境变量配置也是一大坑
接下来,我在.gitlab-ci.yml文件里配置了一些环境变量,结果发现有些敏感信息(比如API密钥)不能直接写在文件里。于是我又开始折腾环境变量的配置。
折腾了半天发现,可以在GitLab项目的Settings -> CI/CD -> Variables里面设置环境变量。这样,这些变量就会自动注入到CI流水线中。
核心代码就这几行:
stages:
- build
- test
build_job:
stage: build
script:
- echo "Building the project..."
- npm install
- npm run build
environment:
name: development
url: https://jztheme.com
only:
- main
注意这里的environment部分,可以用来指定环境名称和URL。
缓存依赖包,提高构建速度
还有一个问题是构建速度太慢。每次都要重新下载依赖包,搞得我等得心急。后来试了下发现,可以在.gitlab-ci.yml文件里加上缓存配置,这样就能大大提高构建速度。
核心代码就这几行:
cache:
paths:
- node_modules/
stages:
- build
- test
build_job:
stage: build
script:
- echo "Building the project..."
- if [ ! -d "node_modules" ]; then npm install; fi
- npm run build
only:
- main
这里我用了cache来缓存node_modules目录,这样下次构建时就可以直接使用缓存的依赖包,不用每次都重新下载。
部署到服务器也是一场战斗
最后一步是把构建好的文件部署到服务器上。一开始我想用SSH直接部署,结果发现每次都需要手动输入密码,太麻烦了。后来试了下发现,可以用GitLab CI的ssh-key来解决这个问题。
首先,在服务器上生成一个SSH公钥:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
然后,把生成的公钥添加到服务器的~/.ssh/authorized_keys文件里。接着,在GitLab项目的Settings -> CI/CD -> Variables里添加私钥。
核心代码就这几行:
deploy_job:
stage: deploy
script:
- echo "Deploying to server..."
- ssh -i $SSH_PRIVATE_KEY user@server_ip "cd /path/to/project && git pull origin main && npm install && npm run build"
only:
- main
这样,每次提交代码后,CI流水线就会自动把最新的代码拉取到服务器上,并且自动安装依赖和构建项目。
总结一下
以上是我踩坑后的总结,希望对你有帮助。如果你有更好的方案或者遇到过类似的问题,欢迎评论区交流。
这个过程虽然有点折腾,但最终还是解决了问题。CI/CD确实能大大提高开发效率,只是刚开始配置的时候需要多花点时间。

暂无评论