• 简单两步,使用 cache 加快极狐GitLab CI/CD 构建速度


    本文来自:

    李发富 极狐(GitLab) 高级技术支持工程师

    A:CI/CD 执行好慢呐,每个 Job 执行的时候都得去下载外部依赖,好烦!

    B: 这你就自寻烦恼了吧,其实可以用 cache 来避免这种状况。

    A:cache?何方神圣?怎么用?快来拯救我!

    B :cache 的使用很简单,follow me💁‍♀️

    极狐GitLab CI/CD Job 在运行过程中不可避免的要下载一些外部依赖,cache 的存在是为了让不同 Job 之间能够共享这些文件,避免每个 Job 都去再次下载,这样做能够节约 CI/CD 的执行时间,提升 CI/CD 的执行效率。

    本文以兼容 s3 标准的 minio 为例,向大家演示如何使用 cache。

    安装 minio


    下载 minio server

    1. wget https://dl.min.io/server/minio/release/linux-amd64/minio
    2. chmod +x minio
    3. mv minio /usr/local/bin/minio
    4. minio -v
    5. minio version RELEASE.2022-02-26T02-54-46Z

    下载 minio client

    1. wget https://dl.min.io/client/mc/release/linux-amd64/mc
    2. chmod +x mc
    3. mv mc /usr/local/bin/mc
    4. mc -v
    5. mc version RELEASE.2022-02-26T03-58-31Z

    配置 minio 数据目录

    1. mkdir -p /opt/minio/data
    2. mkdir -p /opt/minio/logs

    创建 start_minio_server.sh 启动脚本

    1. #!/bin/bash
    2. export MINIO_ROOT_USER=minio
    3. export MINIO_ROOT_PASSWORD=minio123456
    4. nohup minio server /opt/minio/data > /opt/minio/logs/minio.log 2>&1 &

    启动 minio server

    1. chmod +x start_minio_server.sh
    2. ./start_minio_server.sh

    (默认对外服务端口 9000)

    为客户端设置别名

    mc alias set myminio http://10.10.10.60:9000 minio minio123456
    

    配置存储桶

    mc mb myminio/gitlab-cache
    

    配置 runner


    config.toml 增加以下 cache 配置:

    1. concurrent = 10
    2. check_interval = 0
    3. [session_server]
    4.   session_timeout = 1800
    5. [[runners]]
    6.   name = "docker runner"
    7.   url = "https://gitlab.leffss.cn"
    8.   token = "xdfVPzdySQQNPCVgBxK1"
    9.   executor = "docker"
    10.   [runners.cache]
    11.     type = "s3"
    12.     Shared = true
    13.     [runners.cache.s3]
    14.       ServerAddress = "10.10.10.60:9000"
    15.       AccessKey = "minio"
    16.       SecretKey = "minio123456"
    17.       BucketName = "gitlab-cache"
    18.       Insecure = true

    重启 runner 生效。

    使用 cache 示例


    python

    .gitlab-ci.yml 参考:

    1. image: python:3.9.7
    2. stages:
    3.   - test
    4. variables:
    5.   PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
    6.   
    7. cache:
    8.   paths:
    9.     - .cache/pip/
    10.   # 已项目 id 区分 cache,如果不区分,就是全局 cache
    11.   key: $CI_PROJECT_ID
    12. job1:
    13.   stage: test
    14.   script:
    15.     - pip install ansible==2.9.2

    or

    1. image: python:3.9.7
    2. stages:
    3.   - test
    4. cache:
    5.   paths:
    6.     - pip-cache
    7.   # 已项目 id 区分 cache,如果不区分,就是全局 cache
    8.   key: $CI_PROJECT_ID
    9. before_script:
    10.   - export PIP_CACHE_DIR="pip-cache"
    11.   - mkdir -p pip-cache
    12. job1:
    13.   stage: test
    14.   script:
    15.     - pip install ansible==2.9.2

    nodejs

    .gitlab-ci.yml 参考:

    1. variables:
    2.   NPM_CONFIG_CACHE: npm_cache
    3.   NPM_CONFIG_REGISTRY: https://registry.npm.taobao.org
    4. default:
    5.   cache:
    6.     paths:
    7.       - ${NPM_CONFIG_CACHE}
    8. build:
    9.   stage: build
    10.   image: node:14-alpine
    11.   script:
    12.     - node -v
    13.     - npm -v
    14.     - npm ci
    15.     - npm run build
    16.   artifacts:
    17.     name: "build-package"
    18.     paths:
    19.       - dist
    20.     expire_in: 1 day

    java maven

    .gitlab-ci.yml 参考:

    1. build:
    2.   image: maven:3.8.5-jdk-11
    3.   stage: build
    4.   variables:
    5.     MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode"
    6.     MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"
    7.   cache:
    8.     paths:
    9.       - .m2/repository/
    10.       - target/
    11.     key: $CI_PROJECT_ID
    12.   script:
    13.     - mvn package
    14.     - ls -l target/*
  • 相关阅读:
    RabbitMQ入门指南
    vscode 版本比较插件 Git History Diff
    【期末大作业】基于HTML+CSS+JavaScript网上订餐系统(23个页面)
    SKG、倍轻松“亮红灯”,网红按摩仪难逃“过气命”?
    Spring(Ioc)
    抖音直播报白后有平台流量扶持和稳定的流量
    相机图像质量研究(38)常见问题总结:编解码对成像的影响--呼吸效应
    THM-被动侦察和主动侦察
    对象池复用实践
    07 nginx 的 worker process 的调试
  • 原文地址:https://blog.csdn.net/weixin_44749269/article/details/127844255