ASP.NET 응용 프로그램 배포를 자동화하는 Jenkins


13

Jenkins를 사용하여 ASP.NET 웹 응용 프로그램의 배포를 자동화 / 반 자동화 할 가능성이 있습니까? 통제되지 않은 사용자는 사용자 ID와 비밀번호를 입력해야하기 때문에 통제되거나 통제되지 않은 환경에있을 수 있습니다. 웹 팜 시나리오에서 파일을 대상에서 대상으로 복사하고 SQL 스크립트를 실행하는 방법을 찾고 있습니다.

편집 현재 bat 파일을 사용하여 응용 프로그램 풀 / sql cmd 등을 xcopy / 구성하여 응용 프로그램을 배포하고 있습니다. 그러나 이것이 작동하려면 프로덕션 지원 팀이 소스 코드를 다운로드하고 프로젝트를 빌드하고 bat 파일을 실행하여 응용 프로그램을 배포해야합니다.

이제 우리는 사용자가 소스 코드를 다운로드하지 않고 배포를 자동화하고 최종 사용자는 URL을 방문하여 userid 및 password 매개 변수를 채우고 svn 태그를 선택하면 배포해야합니다. 그러나 Jenkins는 익명 로그인으로 실행 중이므로 기존 bat 파일에는 스크립트를 실행할 권한이 없으므로 작동하지 않습니다.

따라서 이런 종류의 상황에 대한 대안이 있는지 알고 싶습니다. 입력 한 사용자 ID와 비밀번호를 사용하여 사용자 컨텍스트를 가장하면 기존 배치 파일을 추가 변경없이 실행할 수 있습니다. 가능하지 않은 경우 다른 아이디어도 탐색하고 싶지만 꼭두각시와 같은 자동화 된 도구를 선택할 수있는 유연성이 없기 때문에 이러한 배치 파일을 사용해야합니다.


연구 결과를 공유하면 모든 사람에게 도움이됩니다. 당신이 무엇을 시도했고 왜 그것이 당신의 요구를 충족시키지 못했는지 알려주십시오. 이것은 당신이 시간을내어 자신을 돕기 위해 노력했고, 명백한 답변을 되풀이하는 것을 막아 주며, 무엇보다도 더 구체적이고 관련있는 답변을 얻는 데 도움이됩니다. 또한 물어
gnat

질문을 업데이트하고 추가 정보를 제공해야하는 경우 알려주십시오.
Sunny

답변:


11

우리가 사용한 것을 공유하고 어디로 갈 계획이 있는지 알려 드리겠습니다. 더 나은 아이디어를 제공하는 데 도움이 될 것입니다.

  • 우리는 현재 Jenkins와 Github를 함께 사용합니다. 일단 무언가가 마스터로 병합되면 Github는 Jenkins에게 알려줍니다.
  • 우리는 Jenkins에서 Nant 스크립트를 사용하여 프로젝트를 빌드하고 단위 테스트를 실행하며 모든 것이 좋아 보인다면 다른 Jenkins 프로젝트를 시작합니다. Nant 스크립트는 또한 완전히 컴파일 된 코드 / 최소화 된 CSS / JS 등으로 디렉토리를 뱉어냅니다.
  • 보조 Jenkins 프로젝트는 빌드에서 출력을 가져 와서 별도의 저장소에서 Github으로 다시 보냅니다.
  • .BAT 파일은 준비 웹 서버에서 5 분마다 실행되며 기본적으로 해당 리포지토리에 대한 업데이트가 있는지 확인합니다. 업데이트가 발견되면 최신 빌드를 다운로드하고 준비 파일을 백업 한 다음 최신 빌드를 준비 폴더에 배포합니다.
  • 라이브로 가기 위해 라이브 파일을 백업하고 리포지토리 파일을 라이브 파일로 복사하는 .BAT 파일이 있습니다. 수동으로 실행됩니다. SQL 업데이트는 처리하지 않습니다 (수동으로 업데이트).

분명히 이것은 완전히 이상적이지는 않지만 우리를 위해 노력하고 있습니다. 우리는 앞으로 이것을 다음과 같이 확장하고 싶습니다 :

  • Web Deploy 를 사용 하여 Jenkins에서 IIS로 파일을 직접 푸시하고 실행해야하는 다른 명령을 수행하십시오.
  • 자동 마이그레이션 (Entity Framework의 기능)을 사용하여 모든 SQL 업데이트를 실시간으로 처리하십시오.

우리가 따르는 것과 거의 같습니다. 그러나 Web Deploy가 Windows 서비스 등을 설치하고 복잡한 웹 응용 프로그램에 필요한 모든 것을 설치할 수 있는지 궁금했습니다. 현재 우리는 ps 도구와 잘 작동하고 있습니다. DB의 경우 DeployDB 도구를 사용할 계획입니다.
Sunny

IIS가 파일을 잠글 때 상황을 어떻게 처리합니까? 누군가가 앱을 사용할 때 상황을 어떻게 처리합니까? 게시 할 때 작업하는 사용자를 위해 여러 노드가 있거나 응용 프로그램을 중단 했습니까?
Piotr Perak 2016 년

1
@Peri-나는 원래 답변에서 언급하는 것을 잊었지만, 두 개의 프로덕션 서버를 계획하고 필요할 때 (IIS 또는 nginx를 사용하여) 서버 사이를 뒤집을 계획입니다. 이렇게하면 배포가 진행될 때 다른 라이브 서버를 "따뜻하게"할 수 있으며 전환 할 수 있으므로 다운 타임이 눈에 띄지 않아야합니다.
니콜라스

4

이미 .Net 앱 및 TFS에 Jenkins를 사용하고 있습니다.

  1. 프로젝트에 필요한 구성을 추가하고 코드를 변환 및 체크인하십시오.
  2. TFS에서 최신 정보 얻기 (TFS 플러그인 사용)
  3. 프로젝트를 빌드하십시오 (MSBuild 플러그인 사용). 명령 줄 인수를 사용하여 Msbuild에서 코드를 게시 할 수 있습니다.
  4. msdeploy.exe 명령을 사용하여 게시 위치에서 대상으로 코드를 동기화합니다 ( "C : \ Program Files (x86) \ IIS \ Microsoft Web Deploy V2 \ msdeploy.exe"에 있음)
  5. Jenkins를 통해 이메일을 보내고 백업을 수행 할 수도 있습니다.

MSTest.exe를 사용하여 단위 테스트를 실행하고 jenkin 콘솔에서 표시하거나 테스트 결과를 게시 할 수도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.