最近在搞cicd相关的事情,在这个过程中遇到了一些疑惑,顺便记录下来,如果对正在有相同迷惑的同学有帮助的话,也是一件很好的事情。
准备工作:
问题及注意点:
问题一:遇到了一个问题,构建速度非常慢,因为当时的项目不大,需要下载的依赖也不多,所以这是为啥?
解答:因为在gitlab-ci.yml文件中用到了artifacts,而这让job产物(可执行程序)上传到gitlab,而我们在gitlab-runner register的时候,url填的是一个公网地址,并且runner机器的外网带宽只有1M,所以很慢,后面将url换成了内网地址,直接起飞,url的更换是直接修改config.toml文件中的url配置,然后运行gitlab-runner restart即可。
问题二:部署的过程中,碰到permission denied这样的报错?
解答:使用root用户运行gitlab-runner即可,不过这个要注意gitlab.yml中的script,不要误操作,修改gitlab-runner运行用户的命令:gitlab-runner uninstall &&?gitlab-runner install --user root,如果不行的话,再gitlab-runner restart即可,如果用到宝塔面板的话,宝塔也用root用户运行项目。
问题三:因为部署的是golang的项目,所以不能每次部署的时候都去下载依赖,这样不科学,所以有什么办法可以解决这个问题呢:
解答:使用gitlab-ci都cache,具体配置如下:
cache: key: ${CI_JOB_NAME} paths: - .mod_cache/
其中key是防止cache被覆盖,paths是要缓存的目录,缓存会以cache.zip的名字自动存储到宿主机上,下次这个job运行的时候,会先解压cache.zip,然后再去编译,这样对于有依赖的项目,速度会有一定的提升。
记录:
最后贴一下,我使用的gitlab-ci.yml文件,仅供参考:
stages: # List of stages for jobs, and their order of execution - build - deploy build-ad-job: # This job runs in the build stage, which runs first. stage: build image: golang:1.21.6 tags: - ytweb script: - echo "Compiling the code..." - go env -w GOMODCACHE=$(pwd)/.mod_cache/ GOPROXY=https://goproxy.cn,direct - make all - echo "Compile complete." cache: key: ${CI_JOB_NAME} paths: - .mod_cache/ rules: - if: '$CI_COMMIT_BRANCH == "dev" || $CI_COMMIT_BRANCH == "main"' artifacts: paths: - bin/ - configs/ - ad.json expire_in: 1 day deploy-ad-dev-job: stage: deploy tags: - testing rules: - if: '$CI_COMMIT_BRANCH == "dev"' # when: manual script: - echo "Deploying dev application..." - bash deploy.sh - echo "Application dev successfully deployed." deploy-ad-prod-job: stage: deploy tags: - online rules: - if: '$CI_COMMIT_BRANCH == "main"' when: manual script: - echo "Deploying prod application..." - bash deploy.sh - echo "Application prod successfully deployed."