프라이빗 러너와 함께 GitHub 작업을 사용하여 IIS에 배포

4691 단어
최근에 저는 GitHub Actions를 사용하여 IIS 웹 애플리케이션에 배포할 수 있는지 묻는 질문을 받았습니다. 당연히 테스트해야 했습니다 😁.

TL;DR PowerShell 스크립트와 동일하게 실행됩니다.





예시



이를 테스트하기 위해 여기에서 예제 애플리케이션repo을 사용했습니다(액션도 찾을 수 있음). 다음 dotnet 명령을 기반으로 합니다.

dotnet new webapp



흐름



이는 .NET Core 애플리케이션이므로 GitHub Actions의 워크플로에는 다음 단계가 있습니다.
  • 레포 체크아웃
  • 올바른 .NET Core 버전 설정
  • 닷넷 빌드
  • 닷넷 게시
  • IIS에 배포
  • 스모크 테스트 실행
  • 웹 테스트 실행(추가 예제로 추가됨, 자세한 내용은 계속 읽으십시오)

  • 해당 워크플로here를 찾을 수 있습니다. 💡 애플리케이션을 Azure App Service에 푸시하는 워크플로를 보려면 옆에 있는 dotnetcore.yml 파일을 확인하세요.

    설정



    IIS 명령을 실행하기 위해 가장 간단한 예를 사용했으며 다른 명령줄 옵션도 작동합니다.
  • 웹 사이트(또는 이 경우 전체 웹 서버) 중지
  • 모든 파일 덮어쓰기
  • WebDeploy 또는 remote PowerShell 세션을 사용하여 웹 사이트를 다시 시작하십시오. 여기에서도 원격에 대한 자세한 설명을 찾아보세요.

  • 동작



    애플리케이션을 '배포'하는 실제 작업은 다음과 같습니다.

    - name: Deploy to IIS
          run: |
            iisreset /stop
            Copy-Item ./dotnetcorewebapp/* C:/inetpub/wwwroot/dotnetcore-webapp -Recurse -Force
            iisreset /start
    
    




    참고: 이 단계를 실행하려면 관리자 수준 액세스 권한이 필요하므로 해당 액세스 수준으로 자체 호스팅 러너를 실행해야 합니다. 이는 해당 수준의 액세스가 필요한 AppExec 명령에서 비롯됩니다(여전히 불행한 일입니다).

    비공개 GitHub 작업 실행기



    Windows 상자에서 애플리케이션 배포를 활성화하려면 클라우드 호스팅 러너가 해당 시스템에 액세스할 수 없기 때문에 private GitHub action runner을 사용해야 합니다(그러면 안 됩니다!). 예를 들어 Azure DevOps와 같은 일반 러너처럼 설치할 수 있습니다. 다행스럽게도 프록시/허용 목록에 추가해야 하는 URL 목록은 목록보다 훨씬 짧습니다.

    러너는 요청 시 또는 Windows 서비스로 실행되며 주기적으로 GitHub에 대한 긴 폴링 연결을 열어 수행할 작업이 있는지 묻습니다. 연결은 항상 나가는 포트 443입니다.

    러너 설치는 웹 사이트의 리포지토리, 팀 또는 조직 수준에서 수행할 수 있습니다. "설정"-> 작업으로 이동하고 자체 호스팅 러너까지 아래로 스크롤합니다.


    러너를 추가하는 것은 매우 쉽습니다. 일회성 인증 프로세스에 사용하는 임시 토큰을 포함하여 모든 단계가 화면에 바로 나열됩니다.


    보너스



    다음 질문은 그러한 러너를 사용하여 Selenium WebTest(이런 유형의 종단 간 테스트라고 함)를 실행할 수 있고 그것이 호스팅된 러너에서도 작동하는지 여부였습니다. 간단히 말해, 그냥 작동합니다.

    두 가지workflows 모두에서 러너에 설치된 Chrome 인스턴스와 통신하기 위해 Selenium 드라이버를 사용하는 WebTest 프로젝트에서 단위 테스트를 실행하는 마지막 단계인 '웹 테스트 실행'을 추가했습니다. 사전 설치된 모든 소프트웨어는 호스팅된 러너here에서 찾을 수 있습니다.

    좋은 웹페이지 즐겨찾기