MSBuild를 통한 GiitHub Actions 구축

제목과 같이 GiitHub Action 워크플로에서 msbuild 명령을 실행하는 방법입니다.
C++ 프로젝트 등 Windows에서 구축해야 하는 장면에서 활약할 것이다.또한, 예를 들어vcpkg를 사용하려면 Windows에도 msbuild이 필요합니다.

Windows GiitHub 호스트 주자 정보


GiitHub Actions의 장점 중 하나는 Windows 주자의 충실성이라고 생각한다.
https://docs.github.com/ja/actions/reference/specifications-for-github-hosted-runners
https://github.com/actions/virtual-environments/blob/main/images/win/Windows2019-Readme.md
Visual Studio의 설치 구조는 전체 섀시에 가깝고 다양한 용도에 적합해야 합니다.내가 알기로는 이전에 이것을 만족시켰던 것은 무료AppVeyor뿐이었지만[1]는 아마도 GiitHub Actions의 안내였을 것이다.AppVeyor가 가장 고민하는 퀘스트 시작 전 지연[2]과도 작별을 고했다.
Windows 환경을 사용하는 CI는 그다지 성행하지 않는다는 인상을 주지만 앞으로 확대될 것으로 기대돼 다음과 같다.

microsoft/setup-msbuild


로컬 환경에서도 마찬가지이지만, 보통 PATH가 통과하지 않기 때문에 명령 알림에서 msbuild을 직접 실행할 수 없습니다.본 보도는 아래의 소개로 끝난다.
https://github.com/microsoft/setup-msbuild
조금 오래된 기사에 사용된 것들warrenbuckley/Setup-MSBuild은 곳곳에서 볼 수 있는데, 지금은 마이크로소프트 공식적으로 준비한 이걸로 할게요.
name: MSBuild

on:
  pull_request:
    types: [synchronize, opened]
    
jobs:
  build:
    runs-on: windows-2019
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Add msbuild to PATH
        uses: microsoft/setup-[email protected]

      - run: |
          msbuild -version
동작 로그의 출력 예.
Microsoft (R) Build Engine version 16.8.3+39993bd9d for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.

16.8.3.61104

msbuild 사용 예: OpenCV 구축


기쁘고 축하스럽고/그렇게 짧은데, 내가 사용했던 예도 소개하면 끝이야.
OpenCV는 GiitHub Actions의 Windows 주자가 구축했다.
https://github.com/shimat/opencv_files
OpenCV를 향한 특별한 말이 많아졌지만, 에센스는 다른 곳에서도 사용할 수 있다고 생각합니다.

플랫폼별 실행


OpenCV 구축에는 상당한 시간이 소요되기 때문에 타겟 플랫폼x64과 평행x86하면 더욱 효과적이다.GiitHub Actions에서 사용matrix은 한 가지 방법입니다.
jobs:
  build:
    strategy:
      matrix:
        arch: ["x86", "x64"]	
    runs-on: windows-2019
    steps:
      ...

의존 라이브러리 준비

  • Windows Server에 설치되어 있지 않으므로 가져옵니다Media Foundation.

  • vcpkg 가져오기 의존 라이브러리(Tesseract)[3]는 Visual Studio 포인트도 유효합니다.위에서 말한 바와 같이 vcpkg에서는 msbuild을 사용하고 PATH를 통과한 후에 진행한다.
  • vcpkg 패키지의 설치는 구축 운행이 느리고 캐시가 유효하기 때문이다.본 보도에서 사랑을 끊다.
  •     steps:
          - name: Checkout
            uses: actions/checkout@v2
    
          - name: Install Server-Media-Foundation
            shell: powershell
            run: |
              Install-WindowsFeature Server-Media-Foundation
    
          - name: Add msbuild to PATH
            uses: microsoft/setup-[email protected]
    
          - name: Vcpkg
            run: |
              vcpkg install tesseract:${{matrix.arch}}-windows-static
              vcpkg integrate install
    

    CMake, MSBuild


    cmake는 윈도 주자 중에서도 도입했기 때문에 바로 사용할 수 있다.cmake의 옵션은 주제가 아니기 때문에 생략했습니다. (실제로는 40~50줄 정도입니다.)OpenCV에 대한 소스 코드도 생략했습니다.
          - name: CMake
            shell: powershell
            run: |
              if (${{matrix.arch}} -eq "x64") {
                $msbuildPlatform = "x64"
              } else {
                $msbuildPlatform = "Win32"
              }
    	  
    	  $buildDirectory = "build_win_${{matrix.arch}}"
              mkdir $buildDirectory -Force -ErrorAction Stop | Out-Null
              cd $buildDirectory
    	  
    	  cmake -G "Visual Studio 16 2019" `
              -A $msbuildPlatform `
              -D CMAKE_BUILD_TYPE=Release `
              -D CMAKE_INSTALL_PREFIX=install `
              -D BUILD_SHARED_LIBS=OFF `
              -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules `
    	  ../opencv 
    	  
          - name: MSBuild
            run: |
    	  cd build_win_${{matrix.arch}}
    	  msbuild INSTALL.vcxproj /t:build /p:configuration=Release /p:platform=$msbuildPlatform -maxcpucount
    

    구문 출력을 그림자로 저장하기


          - name: Upload artifacts
            uses: actions/upload-artifact@v1
            with:
              name: artifacts_win-${{matrix.arch}}
              path: build_win_${{matrix.arch}}/install
    

    끝말


  • microsoft/setup-msbuild MSBuild를 사용할 수 있습니다.
  • Windows 한정된 워크플로우는 GiitHub Actions에서도 쓰기 쉽습니다.비용이 Ubuntu보다 두 배 비싸다 계산이지만 공공은 무료로 다른 문제 없는 장면에서 확대 활용하고 싶습니다.
  • 지금까지 AppVeyor 감사합니다.편히 쉬세요.
  • AppVeyer는 RDP로 가상 환경을 연결할 수 있습니다. 이것은 소박한 데 큰 도움이 됩니다. GiitHub Actions도 꼭...https://www.appveyor.com/docs/how-to/rdp-to-build-worker/
  • 각주
    CircleaCI는 얼마 전에 됐는데 좀 약해 보여요.https://circleci.com/docs/ja/2.0/hello-world-windows/#windows- 이미지에 사전 설치된 소프트웨어 ↩︎
    이처럼 Windows 주자에 대한 투자에 열심인 것은 아마도 GiitHub이 마이크로소프트가 된 영향일 것이다.↩︎
    CI에서 vcpkg을 사용하면 본래 주의해야 한다.지아이허브 주자의 업데이트 vcpkg도 업데이트되고, vcpkg의 각 포장도 업데이트되면서 큰 버전이 바뀐 어느 날부터 갑자기 문제가 생겼을지도 모른다.↩︎

    좋은 웹페이지 즐겨찾기