最近在搞cicd相關(guān)的事情,在這個(gè)過程中遇到了一些疑惑,順便記錄下來(lái),如果對(duì)正在有相同迷惑的同學(xué)有幫助的話,也是一件很好的事情。
準(zhǔn)備工作:
- 安裝gitlab,這個(gè)安裝網(wǎng)上太多了,可以使用二進(jìn)制的方式安裝,也可以使用docker直接運(yùn)行。
- 安裝gitlab-runner,這個(gè)主要就是一個(gè)token和url的使用,一定要正確,還有與gitlab的版本對(duì)應(yīng)也要注意一下,當(dāng)然這個(gè)也是可以使用二進(jìn)制的方式和直接使用docker運(yùn)行的方式。
- docker安裝,應(yīng)為我是用的docker運(yùn)行的gitlab-runner,而且在構(gòu)建的過程中,也是用的golang的docker鏡像進(jìn)行打包的。
問題及注意點(diǎn):
問題一:遇到了一個(gè)問題,構(gòu)建速度非常慢,因?yàn)楫?dāng)時(shí)的項(xiàng)目不大,需要下載的依賴也不多,所以這是為啥?
解答:因?yàn)樵趃itlab-ci.yml文件中用到了artifacts,而這讓job產(chǎn)物(可執(zhí)行程序)上傳到gitlab,而我們?cè)趃itlab-runner register的時(shí)候,url填的是一個(gè)公網(wǎng)地址,并且runner機(jī)器的外網(wǎng)帶寬只有1M,所以很慢,后面將url換成了內(nèi)網(wǎng)地址,直接起飛,url的更換是直接修改config.toml文件中的url配置,然后運(yùn)行g(shù)itlab-runner restart即可。
問題二:部署的過程中,碰到permission denied這樣的報(bào)錯(cuò)?
解答:使用root用戶運(yùn)行g(shù)itlab-runner即可,不過這個(gè)要注意gitlab.yml中的script,不要誤操作,修改gitlab-runner運(yùn)行用戶的命令:gitlab-runner uninstall &&?gitlab-runner install --user root,如果不行的話,再gitlab-runner restart即可,如果用到寶塔面板的話,寶塔也用root用戶運(yùn)行項(xiàng)目。
問題三:因?yàn)椴渴鸬氖莋olang的項(xiàng)目,所以不能每次部署的時(shí)候都去下載依賴,這樣不科學(xué),所以有什么辦法可以解決這個(gè)問題呢:
解答:使用gitlab-ci都cache,具體配置如下:
cache: key: ${CI_JOB_NAME} paths: - .mod_cache/
其中key是防止cache被覆蓋,paths是要緩存的目錄,緩存會(huì)以cache.zip的名字自動(dòng)存儲(chǔ)到宿主機(jī)上,下次這個(gè)job運(yùn)行的時(shí)候,會(huì)先解壓cache.zip,然后再去編譯,這樣對(duì)于有依賴的項(xiàng)目,速度會(huì)有一定的提升。
記錄:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-814107.html
- when: manual 的作用,是該job運(yùn)行的時(shí)候,必須要手動(dòng)去點(diǎn)運(yùn)行才會(huì)運(yùn)行,可以用在部署到線上環(huán)境時(shí)的最后一道防線。
- when: on_success 是默認(rèn)加上的,如果rules中的if條件滿足的話,會(huì)自動(dòng)加上。
- when: never 的意思是不會(huì)將這個(gè)job加入到流水線中,即該job不會(huì)執(zhí)行。
- 可以通過gitlab-runner的tag去指定在哪臺(tái)機(jī)器上執(zhí)行流水線的job,在實(shí)際操作中,可以將打包、構(gòu)建機(jī)器打上一個(gè)tag,然后測(cè)試環(huán)境、線上環(huán)境也打上對(duì)應(yīng)的tag,這樣在job執(zhí)行的時(shí)候,如果需要區(qū)分部署到不同的環(huán)境,就可以通過tag,來(lái)讓job在對(duì)應(yīng)的環(huán)境機(jī)器上運(yùn)行。
- 第4個(gè)點(diǎn)說(shuō)的,通過tag區(qū)分環(huán)境,也可以直接在script中直接使用ssh的方式去進(jìn)行部署到對(duì)應(yīng)的環(huán)境。
- 打包階段的image,可以直接指定版本,不需要用latest,因?yàn)橛胠atest的話,每次都會(huì)去判斷一下本地latest鏡像與hub中的是否一樣,這樣也會(huì)提升一點(diǎn)速度。
最后貼一下,我使用的gitlab-ci.yml文件,僅供參考:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-814107.html
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."
到了這里,關(guān)于gitlab-ci相關(guān)部署踩坑及要點(diǎn)記錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!