当前位置: 首页 > article >正文

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触发规则
    一个手动触发的案例如下:
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

未完待续…


http://www.kler.cn/a/389805.html

相关文章:

  • XSS安全基础
  • 记录学习react的一些内容
  • python实战(八)——情感识别(多分类)
  • Qt 实现文件监控程序
  • Django博客网站上线前准备事项
  • 应对JSON解析键值对乱序问题的实用解决方案
  • 高效工位管理:Spring Boot企业级系统
  • 【K8S系列 】在K8S集群怎么查看各个pod占用的资源大小与详细解决方案【已解决】
  • itextpdf打印A5的问题
  • 【一步步开发AI运动小程序】二十一、如果将AI运动项目配置持久化到后端?
  • 【非关系型数据库】【IOT设备】InfluxDB、TimescaleDB、Cassandra和MongoDB
  • Qml 中的那些坑(七)---ComboBox嵌入Popup时,滚动内容超过其可见区域不会关闭ComboBox弹窗
  • C++ | Leetcode C++题解之第559题N叉树的最大深度
  • 蓝牙 SPP 协议详解及 Android 实现
  • 《深入理解 == 与 equals ():Java 中对象比较的奥秘》
  • GIN:逼近WL-test的GNN架构
  • 分布式数据库:深入探讨架构、挑战与未来趋势
  • 鸿蒙Flutter实战:13-鸿蒙应用打包上架流程
  • 随堂测微信小程序ssm+论文源码调试讲解
  • MongoDB 详解:深入理解与探索
  • IOS开发之MapKit定位国内不准的问题
  • LLaMA-Factory全流程训练模型
  • Flink输出算子
  • Tcp中的流量控制,拥塞控制,超时重传时间的选择,都附带相应例子说明
  • OBOO鸥柏:公司品牌部分户外广告一体机已布局文化传媒市场
  • Spring Boot集成Access DB实现数据导入和解析