만약 당신과 당신의 팀이 실행되는 PowerShell 스크립트가 너무 많이 흩어져 있다면, 이 기사는 당신을 위한 것입니다. 이 기사에서는 인기 있는 Jenkins 자동화 서버를 설정하여 PowerShell 스크립트를 관리하고 실행하는 방법을 배우게 될 것입니다!
Git 버전 관리를 Jenkins와 통합하여 지정된 일정에 따라 PowerShell 스크립트를 설정하고 예약 실행하는 방법을 배우게 될 것입니다.
PowerShell 스크립트 확산: 이것은 제대로 작동하지 않습니다
자동화 엔지니어로서, 우리 팀이 극복해야 했던 주요 도전 중 하나는 예약된 PowerShell 스크립트의 확산이었습니다. 많은 다른 위치에서 예약되고 실행되는 PowerShell 스크립트들을 발견했습니다.
각 엔지니어 또는 엔지니어 팀은 자신들의 서버에서 일정을 예약했습니다. 각 유형의 스크립트는 해당 서비스를 실행하는 서버에서 실행되었습니다.
- A domain controller ran all of the Active Directory scripts.
- Exchange 서버에서는 모든 Exchange 스크립트가 실행되었습니다.
- A member server ran all networking team scripts.
- A member server ran all of the database scripts for the DBAs.
- A member server ran all of the security team’s scripts.
- …그리고 계속해서
이러한 서버 중 어느 것이든 실행 중인 모든 코드는 해당 서버의 temp 디렉토리에 스크립트 파일로 저장되거나 공유 드라이브의 스크립트 폴더로 저장되었습니다. 이것은 악몽이었습니다!
믿거나 말거나, 대부분의 경우, 이 시스템은 잘 작동했습니다. 스크립트는 원하는대로 실행되고 모든 서버에는 백업이 있었습니다. 어떤 코드도 손실되지 않았습니다.
이 상태 quo에 모두가 만족하게 되는 것은 당연히 쉬운 일이었습니다. 이 시스템을 개선하는 것은 우선 순위 목록에서 높지 않았습니다.
그러나이 시스템에는 결함이 있었습니다. 일부 엔지니어의 요구를 충족시키지만, 확장이나 유지 관리가 영구적으로 쉽지 않았습니다. 이 시스템은 예약된 작업에 대한 유연성도 허용하지 않았습니다. 이러한 엄격성으로 인해 동일한 스크립트의 10 가지 버전이 예약되었습니다.
제닉스가 등장합니다.
왜 제닉스를 선택해야합니까?
PowerShell 스크립트를 예약하고 실행하기위한 옵션 중에서 제닉스를 선택하는 이유는 무엇일까요? 제닉스를 사용하면 PowerShell 스크립트를 실행하는 데 많은 이점이 있습니다. 여기에는 몇 가지 주요점이 있습니다.
더 나은 제어
모든 PowerShell 스크립트를 하나의 위치에 두면 스크립트가 실행되는 서버가 궁금할 필요가 없습니다. 이제 더 이상 2 년 전에 작성한 스크립트가 오래되어 일부 서비스 계정을 잠그는 것을 잊을 수 있습니다.
스크립트를 쉽게 찾아볼 수있는 폴더 구조로 구성 할 수 있으며, 모든 스크립트가 실제로 실행되는 위치를 정확히 제어 할 수 있으며, 대형 단일 스크립트를 작은 모듈식 청크로 분할하여 여러 작업에서 재사용 할 수있는 파이프 라인을 사용할 수도 있습니다.
간편한 예약
제닉스를 사용하면 PowerShell 스크립트 실행을 예약하기위한 완벽한 지원을 제공하는 단일 중앙 위치가 있습니다. 서로 다른 시간에 서로 다른 매개 변수로 다른 스크립트를 예약하고 예약을 관리하기위한 좋은 웹 GUI를 사용할 수 있습니다.
버전 관리
일종의 버전 관리 도구 아래에 PowerShell 스크립트를 두면 여러 가지 문제를 해결할 수 있습니다. 그 중 하나는 Jenkins와 같은 도구와 통합할 수 있는 능력입니다. Jenkins는 Git 및 다른 버전 관리 제품과 통합하여 최신 버전을 자동으로 가져올 수 있습니다.
통합된 로깅
PowerShell 스크립트가 여기저기 흩어져 있고 로그를 생성할 때 로그가 어디에나 흩어질 수 있습니다. Jenkins를 사용하면 예약된 작업이 만든 로그 파일을 찾아 뒤지지 않고 웹 사이트의 가독성 있는 출력 창에서 우수한 로깅을 얻을 수 있습니다.
전제 조건/요구 사항
이 문서에서는 Jenkins를 설정하여 PowerShell 스크립트를 실행하는 방법에 대해 안내합니다. 따라서 따라하기 위해 몇 가지 사항이 필요합니다.
- A running Jenkins server
- Jenkins 서버 또는 빌드 에이전트에 Git 설치
- A Git repo set up containing your PowerShell scripts (Be sure you know the repo URL)
- Jenkins Git 플러그인
PowerShell 플러그인 설치
Jenkins에서 PowerShell 스크립트를 실행하려면 PowerShell 플러그인을 설치해야 합니다. 다음과 같이 메인 페이지에서:
- Manage Jenkins를 클릭한 다음 Manage Plugins를 클릭합니다.
- Available 탭을 클릭합니다.
- 화면 오른쪽에 powershell을 Filter 상자에 입력합니다. 그러면 아래에 표시된 것과 같이 PowerShell 플러그인이 나타납니다.

4. Install 확인란을 선택하고 Install without restart를 클릭합니다.
5. PowerShell 플러그인을 설치하면 PowerShell 스크립트를 실행할 때 Windows PowerShell 빌드 단계 옵션이 생성됩니다.
작업 생성
Jenkins는 작업 개념을 가지고 있습니다. 작업은 Jenkins에게 어떤 스크립트를 실행할지, 일정을 준수할지 등을 알려주는 일련의 지시문입니다. 이 섹션에서 PowerShell 스크립트를 실행하는 작업을 생성합니다. 이를 위해 Jenkins에 Git 저장소를 복제하는 작업을 설정합니다.
- Jenkins에 로그인하면 오른쪽 상단에 새 항목을 클릭합니다.

2. 그러면 아래 화면이 표시됩니다. 자유 형식 프로젝트를 선택합니다. 이 유형의 작업은 가장 유연성을 제공합니다.

3. 작업에 Hello World라는 이름을 지정하고 확인을 클릭합니다.

4. 이제 작업 구성 화면에 도달했을 것입니다. 아래에 소스 코드 관리라는 섹션이 표시됩니다. 이를 통해 Jenkins가 작업에서 사용할 수 있도록 Git 저장소를 지정할 수 있습니다. 이 데모에서는 Git을 선택합니다.

5. Git을 클릭하면 Git 저장소 정보를 입력하는 옵션이 나타납니다. 이는 PowerShell 스크립트가 포함된 Git 저장소입니다.

각 필드의 상세 설명은 다음과 같습니다:
- 저장소 URL – Git 저장소를 가리키는 URL입니다. 예를 들어, TFS의 경우 URL은 다음과 같을 수 있습니다: *http://SERVERNAME:8080/tfs//Messaging/_git/Dynamic Distro List*
- 자격 증명 – 저장소에 액세스 할 수 있는 사용자 이름/비밀번호입니다. 이미 설정된 자격 증명이 없는 경우, 추가를 클릭하여 생성할 수 있습니다.
- 이름 – 비워둘 수 있습니다.
- Refspec – 비워둘 수 있습니다.
- 브랜치 지정자 – 이 작업에서 사용할 브랜치를 선택할 수 있습니다. 기본적으로 master 브랜치를 가져옵니다. 다른 테스트 브랜치를 사용하려면 여기에 지정할 수 있습니다.
위에 있는 “저장소 추가” 버튼을 사용하여 한 작업에 여러 저장소를 복제할 수도 있습니다. 이는 모듈이나 다른 종속성을 별도의 저장소에 필요한 경우 유용합니다.
Windows PowerShell 빌드 단계 추가
아마도 Git 저장소의 master 브랜치 루트에 Hello World.ps1이라는 스크립트가 있습니다. 이 스크립트 안에는 단일한 줄이 있습니다:
이 작업 실행 시 이 스크립트를 실행하고 싶습니다. 이를 위해 빌드 단계를 생성해야 합니다.
Jenkins는 작업당 여러 빌드 단계를 지정할 수 있습니다. 여기에는 Windows PowerShell 빌드 단계를 추가해야 합니다. 작업 구성 화면에서 다음을 수행하세요:
- 빌드 단계 추가 버튼을 클릭하고 Windows PowerShell을 선택합니다.

2. 명령 상자 안에는 다음과 같이 Git 리포지토리에 위치한 PowerShell 스크립트를 닷 소스로 사용합니다. PowerShell 환경 변수인 WORKSPACE
를 사용하고 있음을 알 수 있습니다. 이 변수는 현재 작업 디렉토리(Git 리포지토리의 루트 폴더)를 나타냅니다.

3. 이제 저장을 클릭하여 작업을 저장하세요.
이제 Git 리포지토리에서 PowerShell 스크립트를 호출하는 작업이 설정되었습니다!
PowerShell 스크립트 실행하기
작업을 만들었으므로 실행하고 출력을 확인하세요.
- 메인 작업 화면에 있는지 확인하세요. 이 작업에 Hello World라는 이름을 사용한 경우, 기본 URL은 http://localhost:8080/job/Hello world/입니다.
- 메인 작업 화면에서 왼쪽에 있는 지금 빌드를 클릭하세요.

지금 빌드를 클릭하면 현재 작업의 빌드가 즉시 시작됩니다. 복잡하고 긴 실행 시간이 필요한 작업의 경우, 빌드를 클릭하고 실행 중인 실시간 출력을 볼 수 있습니다. 그러나 이 경우 작업은 거의 즉시 실행됩니다.
4. 결과를 확인하려면 빌드 옆의 녹색 확인 표시를 클릭하세요.

모든 것이 계획대로 진행되었다면, 출력에서 다음과 같은 내용을 볼 수 있을 것입니다:

일정과 트리거
이제 필요할 때마다 실행되고 Hello World 메시지를 출력하는 작업이 있습니다. 그러나 Jenkins의 주요 세일 포인트 중 하나는 예약된 작업을 대체하는 것입니다. 수동으로 실행하지 않기를 원합니다. 해당 작업을 다시 열면 빌드 트리거라는 섹션을 볼 수 있습니다.

이것들은 Jenkins에서 지금 빌드를 클릭하지 않고 작업을 실행할 수 있는 옵션입니다.
스케줄 만들기
트리거를 만들기 위해 몇 가지 다른 옵션이 있습니다. 이 예제에서는 간단히 유지합시다.
- 주기적으로 빌드를 선택하세요. 이 트리거를 사용하면 cron과 유사한 스케줄링 구문을 사용하여 작업을 예약할 수 있습니다.
2. 작업을 월요일, 수요일, 금요일 오전 7시 30분에 실행하도록 설정하세요. 아래 그림과 같이.

3. 변경 사항을 저장하고 기다리세요.
지정한 날짜와 시간이 도래하면 빌드 기록에서 원하는대로 스크립트가 실행된 것을 확인할 수 있습니다.

이제 주기적으로 실행되는 PowerShell 스크립트가 Jenkins에 예약되었습니다.