Automatizar la compilación de un proyecto Qt en Windows en Travis CI

Recientemente, para QtProtobuf, me sorprendió configurar un CI mandón para verificar las solicitudes de extracción aka y, por supuesto, insertar una insignia de moda en el archivo README del proyecto. Las opciones fueron GitHub Actions y Travis CI . Honestamente, no me propuse buscar, comparar, analizar, quería simplicidad y solución rápida para una tarea muy simple. Primero, descubrí el CI para las acciones de GitHub y configuré la verificación de prueba de compilación y unidad a través del contenedor acoplable. Pero debido a la gran cantidad de limitaciones, las acciones de GitHub resultaron simplemente inadecuadas para la verificación de proyectos en Windows. Tuve que recurrir a Travis CI.


KDPV_not_found.png


Al momento de escribir este artículo en Travis CI, había tal descargo de responsabilidad:


Las compilaciones de Windows están en la etapa de acceso temprano. Diríjase al foro de la comunidad de Travis CI para obtener ayuda o publicar ideas.

Esto causó preocupación, porque inicialmente intenté configurar todo a través del contenedor acoplable y colocarlo en las acciones de GitHub, pero esta empresa falló debido a restricciones en el tamaño, tipo de contenedores, etc. en github.


A los negocios


Para comenzar, debe autorizar Travis CI en GitHub, después de lo cual la aplicación Travis CI aparecerá en la configuración de su perfil. Convenientemente, puede definir repositorios a los que Travis CI puede acceder:



El siguiente paso es configurar los activadores de Travis CI. Este procedimiento ya se está realizando desde el panel de administración de Travis CI en sí; en el momento de la redacción, estaban disponibles los siguientes desencadenantes:


  • Empuje el lanzamiento a cualquier brunch de proyecto
  • Ejecutar al crear solicitudes de fusión
  • Disparador temporizado (cron)

En principio, un conjunto decente para construir CI.


Después de seleccionar los desencadenantes para ejecutar las compilaciones, debe crear .travis.yml , con una descripción del procedimiento de compilación y, según los desencadenantes disponibles, colocar este archivo en el repositorio. La documentación dispersa y poco sistemática de Travis CI en sí con respecto a .travis.yml quedó perpleja de inmediato, pero puede resolverla si lo desea.


La tarea principal que se mantuvo fue preparar el entorno para el ensamblaje, ya que el ensamblaje en sí y la verificación es asunto de CMake.


Describimos el procedimiento de ensamblaje en .travis.yml


Primero debe elegir un sistema operativo que se ejecute como una máquina virtual en los servidores Travis CI y un lenguaje de programación.


os: windows language: C++ ... 

El lenguaje , según tengo entendido, automatiza algunos pasos si no se especifican explícitamente, pero su vinculación es un misterio para mí. Pensé que sin él no habría MSVC preinstalado, pero durante los experimentos resultó que también estaba presente para otros idiomas.


El siguiente paso es descargar e instalar las dependencias necesarias. Para QtProtobuf, estos son:


  • Qt 5.12.3 o superior
  • cmake-3.1 o superior
  • Fresa perl 5.28 o superior
  • GoLang 1.10 o superior
  • Yasm 1.3 o superior
  • Visual Studio Compiler 14.16.x

Y aquí Travis CI fue de gran ayuda . Entre los paquetes preinstalados no solo estaban Git y MSVC, sino también cmake, wget y chocolatey . En prisnip en presencia de chocolate, se facilita enormemente la instalación adicional de dependencias. Es cierto, sigue siendo un misterio para mí por qué Qt aún no se ha entregado a chocolatey.


Para comenzar, descargue el instalador completo de Qt del repositorio oficial:


 ... before_install: - wget -q https://download.qt.io/official_releases/qt/5.13/5.13.2/qt-opensource-windows-x86-5.13.2.exe ... 

Nota: Al descargar, wget volca una gran cantidad de registros con el progreso de la descarga. Travis CI, como GitHub, tiene un límite en el tamaño del registro de compilación, por lo que se deben evitar registros innecesarios. La opción -q aka --quite oculta la salida del registro wget.

Realizamos la instalación de las dependencias necesarias:


 ... install: - choco install golang - choco install yasm - ./qt-opensource-windows-x86-5.13.2.exe --script ./.ci/qt_installer_windows.qs ... 

Con la instalación de GoLang y Yasm, creo que no debería haber preguntas. Pero con el lanzamiento del instalador Qt, prestaré más atención.


QtInstallerFramework admite la automatización del proceso de instalación al escribir scripts .


Las secuencias de comandos listas para usar para instalar una versión particular de Qt solo están en Google, solo daré un enlace a mi versión actual y prestaré atención a la elección de los componentes para la instalación:


 ... Controller.prototype.ComponentSelectionPageCallback = function() { var widget = gui.currentPageWidget(); widget.deselectAll(); widget.selectComponent("qt.qt5.5132.win32_msvc2017"); gui.clickButton(buttons.NextButton); } ... 

Aquí widget.deselectAll(); todos los componentes de la casilla de verificación llamando a widget.deselectAll(); e incluya el " qt.qt5.5132.win32_msvc2017 " necesario para la construcción. Hay 2 aspectos que son importantes al escribir este procedimiento:


  • selectComponent funciona igual que el componente gráfico y, por lo tanto, las dependencias y subcomponentes se seleccionan de acuerdo con la misma lógica que si los seleccionáramos en la interfaz gráfica. Es por eso que no hay necesidad de preocuparse por resolver dependencias.
  • Los nombres de los componentes se pueden ver en el modo de instalación "verbal". Para hacer esto, realicé widget.selectAll(); en una de las iteraciones widget.selectAll(); e inició la instalación con el - ./qt-opensource-windows-x86-5.13.2.exe --verbose --script ./.ci/qt_installer_windows.qs . En los registros, puede encontrar fácilmente todos los componentes que necesita y moderar su instalación utilizando widget.selectComponent / widget.deselectComponent.

Y el último punto importante que cubriré en este tutorial es el entorno de compilación. Debido al hecho de que la instalación de dependencias y el ensamblaje se llevan a cabo dentro del mismo shell, después de configurar Go y Yasm en nuestro shell no hay una RUTA registrada antes de los archivos ejecutables. Por lo tanto, debe registrar manualmente PATH, GOROOT antes de postrarse:


 script: ... - setx path "%path%;C:\Qt\5.13.2\msvc2017\bin;C:\Go\bin;C:\ProgramData\chocolatey\lib\yasm\tools" - set GOROOT="c:\Go" - set PATH="%PATH%;C:\Qt\5.13.2\msvc2017\bin;C:\Go\bin;C:\ProgramData\chocolatey\lib\yasm\tools" - cmake -DCMAKE_PREFIX_PATH="C:\Qt\5.13.2\msvc2017;C:\Go\bin;C:\ProgramData\chocolatey\lib\yasm\tools" .. ... 

También quiero llamar la atención sobre el hecho de que en CMAKE_PREFIX_PATH, por analogía, debe especificar la ruta a Go y Yasm para que la función find_program funcione correctamente.


Quizás más adelante describa la creación de un contenedor acoplable para construir con Qt a bordo.


Todos los scripts se pueden encontrar aquí.

Source: https://habr.com/ru/post/485034/


All Articles