젠킨스의 파이프라인을 사용하기 위해선 필수적으로 알아야 하는 스크립트로서 Pipeline Syntax 의 영어압박을 느끼시는 분들을 위한 간단한 사용법을 공유해본다

 

먼저 pipeline 을 선언하고 안에서 agent 를 설정하는데 범용적으로 사용하려면 any가 가장 낫다. (여러가지 설정가능하지만 ...)

pipeline {
	agent any
    
    stages {
    	steps {
        
        ...
        }
    }
}

저 안에서 stages 와 step 을 선언하는게 가장 기본형태이다.

 

  • Parameter 전달받기
    • 웹 스크립트이다 보니 js와 유사한 부분이 많은데, 여기서도 파라미터는 ${params.너의파라미터이름} 으로 값을 얻어올 수 있음
  • const 선언
    • 만약 위에서 agent 를 any로 선언하면 상관 없지만 그렇지 않다면 script 블럭 내부가 아니라면 def 사용 불가능
    • 아래처럼 environment로 선언 후 이름 선언 = 초기화 형태로 정의하고, 아래에서는 ${}로 사용하면 해당 값을 사용할 수 있다.
environment {
    너의파라미터이름 = 0
    너의파라미터이름 = 'string'
    너의파라미터이름 = false
}
  • Steps 안에서 할 수 있는 것
    • build job
      • 가장 중요한 명령어로서 job을 실행한다.
      • 아래처럼 잡 이름을 적고 파라미터를 전달해야 한다면 [ ] 블럭 안에다가 갯수만큼 전달한다. (콤마로 구분)
      • js에 대한 개념이 있으신 분은 알겟지만 문자열에 변수를 담고 싶다면 큰따옴표를 써서 "random string : ${name}" 형태로 써야 한다.  변수가 포함되어 있지 않은 문자열이면, 작은 따옴표만 써도 됨
build job : 'job name', parameters: [
    string(name: 'name', value: 'value'),
    string(name: 'name', value: 'value')
]
  • script 블럭
    • 개발자들의 친구인 조건문, 변수 선언을 할수 있는 블럭. script 블럭 외부에서는 조건문을 쓸 수 없다.
script {
    def variable = ''
    if (a == b)
    {
        variable = 'a'
    }
    else
    {
        variable = 'b'
    }
}
  • 함수 선언
    • 일반적인 형태와 같다
    • 유의할 점은 매개변수 전달시 스트링은 대문자로 시작한다.
String MethodName(String ddd)
{
    ...
    
    return ''
}
  • 심화 과정
    • 굳이 job을 만들지 않아도 build step에 포함되는 플러그인을 직접 호출할 수 있다
    • 호출하고자 하는 클래스 이름은 어디에서 알 수 있냐면, 플러그인 github의 README.md 에서 확인할 수 있고, 플러그인은 메이븐으로 만들므로 github의 소스코드를 열여보면 어떤 변수명이 허락되는지, 호출가능한 클래스이름은 무엇인지 확인가능하다.
step([$class: '호출하고자 하는 클래스 이름', 
    해당 클래스의 매개변수 이름: 전달할 값, (매개변수가 여러개면 갯수만큼 추가)
    ])

 

'Jenkins' 카테고리의 다른 글

Jenkins Unity Build  (0) 2020.08.21

Jenkins는 CI(지속적 통합) 툴의 일종으로 여러 개발자들의 작업내용을 git 등의 저장소에 업로드 하면 이를 감지하여 배포 작업 및 자동화 테스트 등을 주기적으로 진행하는 서비스이다.

Jenkins 설치

Windows - Jenkins Download Page 에서 플랫폼에 맞는 installer 다운로드

Mac - brew를 통해 설치

$ brew install jenkins

Mac - Service 시작

$ brew services start jenkins

http://localhost:8080 접속

 

최초 접속 시 아래와 같은 화면이 나오는데, 현재 젠킨스를 설치하는 계정의 홈디렉토리 경로에 초기 비밀번호를 기록했으니 입력하라는 내용

 

해당 경로의 파일을 열어 내용을 복사한 후 붙여넣기 하자

Mac 일 경우에는 cat 명령어로 출력한 후 이를 복사붙여넣기 하면 된다

 

어떤 방식으로 설치할 것인지 묻는다. 주요 플러그인이 포함된 채로 설치할지 하나하나 직접 선택해서 설치할지 선택 (여기서는 첫번째인 Install suggested plugins 선택)

그 후 관리자 계정을 만드는 화면으로 이동한다

  1. 계정명 : 로그인 아이디
  2. 암호 : 패스워드
  3. 이름 : 닉네임 (로그인시 프로필에 노출)
  4. 이메일 주소 : 알림 있을씨 받을 이메일 주소 (optional)

다음과 같은 화면이 나오면 관리자 계정으로 로그인

Setting

플러그인 설치

 

Jenkins 메뉴에서 Manage Jenkins -> Manage Plugins 에서 필요한 플러그인을 다운로드 하자

  • Unity3d plugin - 유니티 빌드에 필요
  • Git client plugin - git을 통한 소스관리에 필요 (push, pull 등)
  • Google Cloud Storage plugin - 추출된 번들을 firebase storage에 올리기 위해 필요
  • Xcode integration - xcode 빌드에 필요
  • Pipeline - Jenkins 빌드를 script로 제어하기 위해 필요
  • Slack Notification Plugin - 빌드가 성공적으로 완료됐을시 알림을 위해 필요
  • Google Drive Uploader - 공식 플러그인 아님, apk나 ipa 파일을 구글드라이브에 업로드하기 위해 필요

Process

 

기본적으로 유니티나 xcode를 직접 열지 않고 빌드하려면 Command Line Interface (CLI) 를 이용하면 되고 Jenkins가 기본으로 제공하는 Shell Script 를 이용하면 자동빌드는 가능하다.

 

단지 위 플러그인이 필요한 이유는 CLI 를 쉽게 쓸 수 있도록 일정한 View Interface를 제공해주기 때문

 

Jenkins는 모든 작업이 Job 으로 이루어져 있고 Pipeline 이 여러 job을 감싸는 구조이다

 

이를 pipeline script 라는 언어를 통해 컨트롤 할 수 있으며, git을 통해 버전관리도 가능

  • Job 생성
  • New Item 선택

  • Freestyle project 선택하고 이름 입력

  • Build Step 추가
    • 해당 Job이 실행할 스텝을 추가하면 되는데 여기에는 Unity 빌드를 등록하거나 Xcode 빌드를 등록하는 등 job이 실제 실행할 동작들을 명시한다.
    • 여러 Step이 있을 경우 Top Down 방식으로 진행됨

  • Invoke Unity3d Editor

  • Unity3d installation name - 유니티가 설치된 경로를 설정
  • Jenkins의 Global Tool Configuration에 가보면 Unity3d 항목이 있다. 여기서 job에 노출될 이름과 설치 경로를 설정하고 installation을 추가해야만 해당 항목에서 선택할 수 있다

  • Editor command line argument - 유니티는 CLI를 위한 다양한 argument를 제공하므로 여기에 argument를 명시한다
    • Unity CLI Manual
    • e.g) -quit -batchmode -nographics -projectPath YOUR_PATH -executeMethod YOUR_METHOD
  • Xcode
    • General build settings
    • Development Team ID - 애플 개발자 계정에 등록된 ID

team ID

  • Configuration  - Debug나 Release 입력
  • Xcode Schema File - 특정 스키마파일 경로인데 유니티에서 iOS로 빌드시 자동생성되는스키마 네임은 Unity-iPhone 이므로 입력
  • Generate Archive - 빌드테스트가 아닌 ipa 파일 추출이 목적이므로 체크
  • Pack application, build and sing .ipa - 체크
  • Export method - ipa파일의 용도 명시인데, 단순 개발목적이라면 development, TestFlight 등 AppStore 등록이 목적이라면 app-store 기입
  • .ipa filename pattern - 추출될 ipa파일 이름. 추후에 설명할테지만 ${환경변수} 형태로 환경변수를 미리 설정해놓고 그 값에 접근할 수 있는데, ${BASE_NAME} 이나 ${VERSION} 등 여러 환경변수를 제공한다
  • Output directory - .ipa 파일이 추출될 경로. 비어놓을시 기본경로 (xcode project/build)에 추출됨
  • 나머지 값들은 필수가 아니거나 입력하지 않음

  • Code sigining & OS X keychain options - Automatic sigining 설정

  • Advanced Xcode build options
    • Xcode Workspace File - 유니티에서 iOS 빌드를 통해 Xcode Project 생성시 만약 Pod Project가 포함되어 있다면, 이 항목에 Unity-iPhone 를 입력한다. 특이한 점은 경로 모두 제외하고 이름만 입력하면 되는데 경로는 아래 항목인 Xcode Project Directory에서 참조하거나 Jenkins의 job 저장소에서 참조하기 때문이다
    • Xcode Project Directory - 유니티에서 빌드된 Xcode Project의 경로를 설정해준다

  • 환경변수 (Global Environment Variables)
    • jenkins 에서는 동일한 값의 중복사용을 방지하고자 C# 의 static 변수처럼 미리 Key, Value를 설정해놓고 항목이나 script에서 이를 참조할 수 있는데 이때 사용하는 형식이 ${변수} 형태이다
    • 또한 아래에서 설명하겠지만 job 별로 parameter 값을 입력받아 내부에서 접근할 수 있는데 이때에도 {변수}형태를 쓰면 된다
    • 환경변수 설정은
      • Manage Jenkins
      • Configure System
      • Global properties
      • Environment Variables 체크 -> Add 클릭 -> Key, Value 설정

  • 전달변수 (Parameter)
    • job 은 실행시에 값을 입력받을 수 있는데 이를 Parameters 라 한다job 설정 부분에서 This project is parameterized 를 체크하면 여러 Parameter형태를 등록할 수 있는데 Name 란에 입력된 값은 Build Step 단계에서 ${Name}으로 접근할 수 있고, 하나라도 Parameter가 있으면 job 선택시에 왼쪽 메뉴에 Build with Parameters 메뉴가 활성화된다

  • 이를 선택하면 Parameter 형태에 따라 입력필드가 생기는데 기본 종류에 더해 플러그인을 통해 Parameter 타입을 추가할 수도 있다

 

Pipeline Script

이렇게 위에서 구성한 Job들을 통해 빌드를 진행하는데, XR 프로젝트처럼 여러 job이 연쇄적으로 실행되어 최종 결과물을 뽑아야 할 경우를 대비해 Jenkins는pipeline 을 제공하고 pipeline은 별도의 script를 통해 이러한 job들을 생성, 관리 할 수 있다.

  • Pipeline  생성 - Jenkins -> New Item -> Pipeline 선택

  • Definition
  • pipeline script - 직접 스크립팅
    • syntax (문법) 에 대해선 양이 방대하므로 해당 문서에서는 다루지 않음
  • Pipeline Syntax
    • pipline script from SCM - 원격저장소에서 스크립트를 읽어서 실행

 

Custom Plugin

  • Jenkins 의 plugin 페이지에 제공되지 않는 비공식 플러그인이 필요할때가 있다. Google Drive Upload 가 그 예인데, Manage Plugin 페이지에는 없지만 github나 오픈소스 사이트에 Jenkins 플러그인이 있다면, 우리는 직접 이 프로젝트를 빌드해서 Jenkins에서 사용해야 한다
  • Jenkins의 모든 plugin은 Maven 이라는 아파치의 자바용 프로젝트 관리 도구로 만드는데, 이를 사용하기 위해서는 command 창을 열어 사이트에서 받은 소스중 pom.xml 이 있는 root 폴더로 이동한 뒤에 오픈소스 사이트의 README.md 나 가이드 문서에 나온대로 명렁어를 실행하면 된다. (mvn clean 이나 mvn compile, mvn test 등..)
  • 실행한 뒤 hpi 파일을 뽑아내야 한다

  • mvn 명령어를 사용하기 위해선 Maven 을 설치해야 함
  • Maven Install
  • jenkins 는 hpi 파일을 plugins folder에 넣어주고 재시작하면 설치 가능 목록에 추가한 Custom Plugin이 노출됨

'Jenkins' 카테고리의 다른 글

Pipeline Script  (0) 2020.08.21

+ Recent posts