CI/CD集成实战分享:从配置到部署的那些坑和技巧

皇甫红梅 工具 阅读 1,068
赞 30 收藏
二维码
手机扫码查看
反馈

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确实能大大提高开发效率,只是刚开始配置的时候需要多花点时间。

本文章不代表JZTHEME立场,仅为作者个人观点 / 研究心得 / 经验分享,旨在交流探讨,供读者参考。
发表评论

暂无评论