当前位置:   article > 正文

玩转Qt(12)-github-Actions缓存优化_github actions msvc

github actions msvc
gallery-img

简介

在之前两篇文章《github-Actions自动化编译》《github-Actions自动化发行》中,

介绍了github-Actions的一些用法,其中有部分配置,已经有了缓存相关的步骤。

这里专门开一篇文章,来记录github-Actions的缓存优化相关的知识。

原理

缓存actions模板

github-Actions提供了缓存模板cache

缓存文档

官方文档也有说明 缓存文档

缓存大致原理就是把目标路径打包存储下来,并记录一个唯一key。

下次启动时,根据key去查找。找到了就再按路径解压开。

缓存大小限制

注意缓存有大小限制。对于免费用户,单个包不能超过500MB,整个仓库的缓存不能超过2G。

缓存运作流程

一般我们在任务步骤中增加一个cache

  1. steps:
  2. ...
  3. - use: actions/cache@v1
  4. with:
  5. ...
  6. ...

那么在这个地方,缓存执行的操作是restore。

在steps的末尾,会自动增加一个PostCache,执行的操作是record。

Qt项目的缓存优化

Qt项目每次运行Actions时,都是先通过install-qt-action模板,安装Qt,之后再获取代码,编译运行。

安装Qt这个步骤,可快可慢,涛哥在windows平台测试下来,平均要1分30秒左右。

加上cache后,平均只有25秒。

无缓存的配置

先看一个Qt项目的编译配置

  1. name: Windows
  2. on: [push,pull_request]
  3. jobs:
  4. build:
  5. name: Build
  6. runs-on: windows-latest
  7. strategy:
  8. matrix:
  9. qt_ver: [5.12.6]
  10. qt_target: [desktop]
  11. qt_arch: [win64_msvc2017_64, win32_msvc2017]
  12. include:
  13. - qt_arch: win64_msvc2017_64
  14. msvc_arch: x64
  15. - qt_arch: win32_msvc2017
  16. msvc_arch: x86
  17. # 步骤
  18. steps:
  19. # 安装Qt
  20. - name: Install Qt
  21. uses: jurplel/install-qt-action@v2.0.0
  22. with:
  23. version: ${{ matrix.qt_ver }}
  24. target: ${{ matrix.qt_target }}
  25. arch: ${{ matrix.qt_arch }}
  26. # 拉取代码
  27. - uses: actions/checkout@v1
  28. with:
  29. fetch-depth: 1
  30. # 编译msvc
  31. - name: build-msvc
  32. shell: cmd
  33. env:
  34. vc_arch: ${{ matrix.msvc_arch }}
  35. run: |
  36. call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" %vc_arch%
  37. qmake
  38. nmake

加缓存

缓存步骤,一般尽量写steps最前面。

  1. # 步骤
  2. steps:
  3. # 缓存
  4. - name: cacheQt
  5. id: WindowsCacheQt
  6. uses: actions/cache@v1
  7. with:
  8. path: ../Qt/${{matrix.qt_ver}}/${{matrix.qt_arch_install}}
  9. key: ${{ runner.os }}-Qt/${{matrix.qt_ver}}/${{matrix.qt_arch}}

install-qt-action有默认的Qt安装路径${RUNNER_WORKSPACE},不过这个环境变量不一定能取到。

涛哥实际测试下来,以当前路径的上一级作为Qt路径即可。

环境变量还原

缓存只是把文件还原了,环境变量并没有还原,我们还需要手动还原环境变量。

install-qt-action这个模板增加了一个环境变量Qt5_Dir,值为Qt的安装路径,并把对应的bin添加到了Path。

我们要做的,就是在缓存恢复成功后,重新设置这两个变量,并去掉install-qt的步骤。

  1. - name: setupQt
  2. if: steps.WindowsCacheQt.outputs.cache-hit == 'true'
  3. shell: pwsh
  4. env:
  5. QtPath: ../Qt/${{matrix.qt_ver}}/${{matrix.qt_arch_install}}
  6. run: |
  7. $qt_Path=${env:QtPath}
  8. echo "::set-env name=Qt5_Dir::$qt_Path"
  9. echo "::add-path::$qt_Path/bin"

steps.WindowsCacheQt.outputs.cache-hit == ‘true’

是缓存模板的输出值,可以作为后续步骤的条件判断。

最终配置

写个伪配置,简单示例一下缓存流程

steps:

  • cache
  • setupQt
    if: cache-hit == ‘true’
  • installQt
    if: cache-hit = ‘false’

实际配置

  1. name: Windows
  2. on:
  3. # push代码时触发workflow
  4. push:
  5. # 忽略README.md
  6. paths-ignore:
  7. - 'README.md'
  8. - 'LICENSE'
  9. # pull_request时触发workflow
  10. pull_request:
  11. # 忽略README.md
  12. paths-ignore:
  13. - 'README.md'
  14. - 'LICENSE'
  15. jobs:
  16. build:
  17. name: Build
  18. # 运行平台, windows-latest目前是windows server 2019
  19. runs-on: windows-latest
  20. strategy:
  21. # 矩阵配置
  22. matrix:
  23. qt_ver: [5.12.6]
  24. qt_target: [desktop]
  25. # mingw用不了
  26. # qt_arch: [win64_msvc2017_64, win32_msvc2017, win32_mingw53,win32_mingw73]
  27. qt_arch: [win64_msvc2017_64, win32_msvc2017]
  28. # 额外设置msvc_arch
  29. include:
  30. - qt_arch: win64_msvc2017_64
  31. msvc_arch: x64
  32. qt_arch_install: msvc2017_64
  33. - qt_arch: win32_msvc2017
  34. msvc_arch: x86
  35. qt_arch_install: msvc2017
  36. env:
  37. targetName: HelloActions-Qt.exe
  38. # 步骤
  39. steps:
  40. - name: cacheQt
  41. id: WindowsCacheQt
  42. uses: actions/cache@v1
  43. with:
  44. path: ../Qt/${{matrix.qt_ver}}/${{matrix.qt_arch_install}}
  45. key: ${{ runner.os }}-Qt/${{matrix.qt_ver}}/${{matrix.qt_arch}}
  46. - name: setupQt
  47. if: steps.WindowsCacheQt.outputs.cache-hit == 'true'
  48. shell: pwsh
  49. env:
  50. QtPath: ../Qt/${{matrix.qt_ver}}/${{matrix.qt_arch_install}}
  51. run: |
  52. $qt_Path=${env:QtPath}
  53. echo "::set-env name=Qt5_Dir::$qt_Path"
  54. echo "::add-path::$qt_Path/bin"
  55. # 安装Qt
  56. - name: Install Qt
  57. if: steps.WindowsCacheQt.outputs.cache-hit != 'true'
  58. # 使用外部action。这个action专门用来安装Qt
  59. uses: jurplel/install-qt-action@v2.0.0
  60. with:
  61. # Version of Qt to install
  62. version: ${{ matrix.qt_ver }}
  63. # Target platform for build
  64. target: ${{ matrix.qt_target }}
  65. # Architecture for Windows/Android
  66. arch: ${{ matrix.qt_arch }}
  67. # 拉取代码
  68. - uses: actions/checkout@v1
  69. with:
  70. fetch-depth: 1
  71. # 编译msvc
  72. - name: build-msvc
  73. shell: cmd
  74. env:
  75. vc_arch: ${{ matrix.msvc_arch }}
  76. run: |
  77. call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" %vc_arch%
  78. qmake
  79. nmake
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号