gitlab ci/cd搭建及使用笔记

记录下使用gitlab的ci/cd的devops构建过程中,一些易忘点或者踩坑点:

  1. 官方文档中英文(建议英文)
    https://docs.gitlab.com/ee/ci/yaml/artifacts_reports.html
    https://gitlab.cn/docs/jh/ci/pipelines/schedules.html
  2. 为什么创建了流水线后,触发了一次流水线之后会自动不停地创建流水线?
    如果你在你的工程设置中,让流水线给你自动生成tag,该tag的提交就会被push到代码库,而如果你每禁用push事件或每指定具体push规则,每次push又会创建运行新的流水线,因此造成了死循环;
    解决方法要么把流水线改为手动触发,要么禁用push触发,要么就细化push触发规则
    一个手动触发的案例如下:
yaml 复制代码
stages:          # List of stages for jobs, and their order of execution
  - build
  - release
  - package
  - test
  - deploy

#workflow:
#  rules:
    #- if: '$CI_PIPELINE_SOURCE == "push"'
    #  when: never
#    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'

build_job:       # This job runs in the build stage, which runs first.
  stage: build
  rules:
    - if: '$CI_PIPELINE_SOURCE == "push"'
      when: manual
    # - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
  script:
    - work_root=`pwd`
    - echo "wortroot:${work_root} " >> release.log
    - chmod +x script/build_control.sh && sh script/build_control.sh >> release.log
    - tar -cf output.tar build >> release.log
  artifacts:
    paths:
      - output.tar
      - release.log
    expire_in: 1 week

release_job:
  stage: release
  needs: ["build_job"]
  #rules:
  #  - if: '$CI_PIPELINE_SOURCE == "push"'
  #    when: never
  script:
    - echo "$CI_PIPELINE_SOURCE" >> release.log
    - echo "running release_job" >> release.log
    - export CI_COMMIT_TAG=`date +"%Y%m%d%H%M%S"`
    - echo "$CI_COMMIT_TAG" >> release.log
    - export ci_commit_branch=${CI_COMMIT_BRANCH}
    - echo "$CI_COMMIT_BRANCH" >> release.log
    - release-cli create --description "release $CI_COMMIT_TAG" --tag-name "${ci_commit_branch}.v.$CI_COMMIT_TAG"
  dependencies:
    - build_job
  1. 为什么我在一些阶段的产出文件无法在最终流程结束后找到也无法被下一个阶段使用?
    这是因为每个阶段都会删除上一阶段的数据,重新拉取运行,如果你希望你上一个阶段的脚本执行产出被保留,需要使用artifacts,上面的案例也有
  2. gitlabrunner可以自己装在自己的服务器上,不一定要用它推荐的镜像
  3. 为什么找不到CI_COMMIT_TAG环境变量?或者无法把gitlab-runner里面的环境变量带到流水线的脚本里?
    目前这是gitlab设计的一个已知问题,把gitlab流水线的专有变量带到gitlab-runner所在实例可采用示例中export方式,然后你就可以直接使用了。

两个比较多的案例

https://zhuanlan.zhihu.com/p/510820543

https://blog.51cto.com/busy/6543293

未完待续...

相关推荐
凤年徐10 分钟前
【数据结构】时间复杂度和空间复杂度
c语言·数据结构·c++·笔记·算法
茫忙然26 分钟前
【WEB】Polar靶场 Day8 详细笔记
笔记
飞升不如收破烂~32 分钟前
英语笔记1.0
笔记
ozawacai37 分钟前
markdown学习笔记(个人向) Part.1
笔记·学习
喝可乐的布偶猫41 分钟前
Java-----韩顺平单例设计模式学习笔记
java·笔记·设计模式
hwj运维之路42 分钟前
GitOps实践指南:GitLab CI/CD + ArgoCD 实现 Kubernetes 自动化部署
ci/cd·gitlab·argocd
笑衬人心。2 小时前
Java 17 新特性笔记
java·开发语言·笔记
序属秋秋秋3 小时前
《C++初阶之内存管理》【内存分布 + operator new/delete + 定位new】
开发语言·c++·笔记·学习
quant_19865 小时前
R语言如何接入实时行情接口
开发语言·经验分享·笔记·python·websocket·金融·r语言
宝山哥哥10 小时前
网络信息安全学习笔记1----------网络信息安全概述
网络·笔记·学习·安全·网络安全