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

未完待续...

相关推荐
蒸蒸yyyyzwd3 小时前
AI应用相关可能的面试问题
笔记
叼烟扛炮4 小时前
[Git 实战] 学习笔记:从生成 SSH 密钥到解决 TortoiseGit 推送报错全指南
linux·运维·笔记·git·学习
蒸蒸yyyyzwd5 小时前
学习笔记 八股手撕
笔记·学习
揣一尾游鱼yu6 小时前
Spring上(IOC)笔记
java·笔记·spring·ioc
小李不想当小白8 小时前
BKP备份寄存器与RTC实时时钟(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
瑞码空间10 小时前
JSP与Servlet核心开发与CRUD实战笔记
java·笔记·servlet·jsp
La Pulga10 小时前
【FreeRTOS源码学习笔记】链表的实现
数据结构·笔记·stm32·mcu·链表·嵌入式·freertos
wuyoutrans13 小时前
以色列专利OA答复翻译,重点要避开哪些坑?
笔记
宝绿特塑业再生科技13 小时前
HDPE再生颗粒户外家具表面粉化机理与改性技术全解析
笔记·户外家具·再生塑料·塑木桌椅
凉、介14 小时前
深入理解 ARMv7-A | Generic Timer
笔记·学习·嵌入式·arm