Jenkins - Sizuha/devdog GitHub Wiki
ํ๋ฌ๊ทธ์ธ ๋ฆฌ์คํธ: https://wiki.jenkins-ci.org/display/JENKINS/Plugins
์ฌ์ฉ๊ฐ๋ฅํ ํ๋ฌ๊ทธ์ธ ํ์ด์ง( http://localhost:8080/pluginManager/available )์์ Plugin์ ์ฐพ์์ ์ฒดํฌํ๊ณ ์ค์น ํ ์ ํจ์ค๋ฅผ ๋ฆฌ์คํํธ ํด์ค๋ค.
http://localhost:8080 ์ ์ ์์ด ๋์ง ์๋๋ค
์ต์ ๋ฒ์ JDK๊ฐ ์ค์น๋์ด ์๋์ง ํ์ธํด ๋ณด๋ผ.
์ ํํ ์๋ฌ๋ ๋ค์ ๋ก๊ทธ๋ฅผ ํ์ธ.
$ nano /var/log/jenkins/jenkins.log
๊ทธ๋๋ ํด๊ฒฐ์ด ์๋๋ค๋ฉด, log ํ์ผ์ ๊ถํ ๋ฌธ์ ์ผ ์ ์๋ค.
- ์ฐธ๊ณ : http://stackoverflow.com/questions/26483089/launchd-is-not-starting-jenkins-server-on-os-x-yosemite
๋ค์๊ณผ ๊ฐ์ด ์งํ.
$ sudo chown jenkins /var/log/jenkins/jenkins.log
$ sudo nano /etc/newsyslog.d/jenkins.conf
/etc/newsyslog.d/jenkins.conf ํ์ผ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ด ๋ฐ๊พผ๋ค.
/var/log/jenkins/jenkins.log 644 3 * $D0 J
to
/var/log/jenkins/jenkins.log jenkins:jenkins 644 3 * $D0 J
์ด๋ ๋ค์์ ์์ฑ๋๋ ๋ก๊ทธํ์ผ๋ค๋ ๊ณ์ํด์ jenkins ์ ์ ๊ฐ ์์ ์ ๊ถํ์ ๊ฐ์ง๋๋ก ํ๋ค.
$ sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
$ sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist
๋น๋ ํ๋ก์ธ์ค์์ ssh ์ฐ๊ฒฐ์ ์ฌ์ฉํ๊ณ ์ ํ ๋, Jenkins ๊ณ์ ์ ssh ์ค์ ์ด ํ์ํ๋ค.
$ sudo su - Jenkins
$ mkdir .ssh
$ cd ~/.ssh
$ sudo nano config
Jenkins ๊ณ์ ์ ํ ๋๋ ํ ๋ฆฌ ๊ฒฝ๋ก: */Users/Shared/Jenkins/ (macOS)
- Git ๋ฑ์ ๋ฒ์ ๊ด๋ฆฌ ํ๋ฌ๊ทธ์ธ
- Git์ ๊ฒฝ์ฐ: Git Client, Git Server, Git Parameter
- Unity3d Build plugin
- Xcode integration (iOS ๋น๋์ฉ)
Job์ Unity3dBuilder ํ๋ฌ๊ทธ์ธ์ ์ถ๊ฐํ๊ณ , Invoke Unity3d Editor ํญ๋ชฉ์ Editor command line arguments์ ๋ค์๊ณผ ๊ฐ์ ํ์์ผ๋ก ์ถ๊ฐ.
-quit -batchMode -executeMethod ProjectBuilder.PerformAndroidBuild
๋น๋ ์์ ์์ DEFINE ์ฌ๋ณผ์ ์ค์ ํ๊ณ ์ ํ ๋๋,
static void Pattern1 {
PlayerSettings.SetScriptingDefineSymbolsForGroup (BuildTargetGroup.Android, "TEST1;TEST2");
}
static void Pattern2 {
PlayerSettings.SetScriptingDefineSymbolsForGroup (BuildTargetGroup.Android, "TEST3;TEST4");
}
Unityํ๋ก์ ํธ์ Assets/Editor/ ๊ฒฝ๋ก์ ๋ค์ ๋ด์ฉ์ผ๋ก ProjectBuilder.cs ํ์ผ์ ์์ฑ.
using UnityEngine;
using UnityEditor;
using System;
using System.Collections;
using System.Collections.Generic;
class ProjectBuilder {
static string[] SCENES = FindEnabledEditorScenes();
static string APP_NAME = "YourProject";
static string TARGET_DIR = "build"; // !! ์ค์: Standalone ๋น๋ ๋ฑ์ ๊ฒฝ์ฐ์, ํ๊ฒ ๊ฒฝ๋ก๋ฅผ ์ง์ ํด ์ฃผ์ง ์์ผ๋ฉด ๋น๋์ ์คํจํ๋ค.
[MenuItem ("Custom/CI/Build Android")]
static void PerformAndroidBuild () {
string target_filename = TARGET_DIR + "/" + APP_NAME + ".apk";
GenericBuild(SCENES, target_filename, BuildTarget.Android ,BuildOptions.None);
}
private static string[] FindEnabledEditorScenes() {
List<string> EditorScenes = new List<string>();
foreach(EditorBuildSettingsScene scene in EditorBuildSettings.scenes) {
if (!scene.enabled) continue;
EditorScenes.Add(scene.path);
}
return EditorScenes.ToArray();
}
static void GenericBuild(string[] scenes, string target_filename, BuildTarget build_target, BuildOptions build_options) {
EditorUserBuildSettings.SwitchActiveBuildTarget(build_target);
string res = BuildPipeline.BuildPlayer(scenes, target_filename, build_target, build_options);
if (res.Length > 0) {
throw new Exception("BuildPlayer failure: " + res);
}
}
}
๊ฐ ํ๋ซํผ ๋น๋ ์ํ์ฉ Static Method์๋ ๋ค์๊ณผ ๊ฐ์ ์์ฑ ๋ถ์ฌ. (์ด๊ฒ์ ์ ๋ํฐ์ ๋ฉ์ธ๋ฉ๋ด์ ํญ๋ชฉ์ ํ์ํ๊ธฐ ์ํจ.)
[MenuItem ("Custom/CI/Build Android")]
[MenuItem ("Custom/CI/Build IOS")]
[MenuItem ("Custom/CI/Build Mac OS X")]
[MenuItem ("Custom/CI/Build Win32")]
์ฃผ์ํ ์ ์ keystore์ password๋ฅผ ์ง์ ํด ์ค์ผ ํ๋ค๋ ๊ฒ.
[MenuItem ("Custom/CI/Build Android")]
static void PerformAndroidBuild() {
string target_filename = APP_NAME + "_" + PlayerSettings.bundleVersion.Replace(".", "_") + ".apk";
PlayerSettings.Android.keystorePass = "password";
PlayerSettings.Android.keyaliasPass = "password";
GenericBuild(FindEnabledEditorScenes(), target_filename, BuildTarget.Android ,BuildOptions.None);
}
์ด์ ์ ๋ถํ ํด์ apk + obb ํ์์ผ๋ก ๋น๋ํ๊ณ ์ ํ ๊ฒฝ์ฐ,
PlayerSettings.Android.useAPKExpansionFiles = true;
์ ๋ํฐ ๋น๋ ๋์ค์ WindowsServer์ ์ ์ํ์ง ๋ชปํ๋ค๋ ์ค๋ฅ๊ฐ ๋ฌ๋ค. ์ด๋ LaunchDeamon ๊ถํ์ผ๋ก Jenkins๊ฐ ์คํ๋๊ธฐ ๋๋ฌธ.
- ๋ ธ๋ ๊ด๋ฆฌ์์์ Unity ๋น๋์ฉ ๋ ธ๋๋ฅผ ์๋ก ์ถ๊ฐ.
- Remote FS Root ๊ฒฝ๋ก ์ค์ : /Users/{user}/Jenkins/slave
- JNLP๋ฅผ ๊ฒฝ์ ํด์ ์คํ ์ต์ ์ ํ
- Job ์ค์ ์์ ์คํํ ๋ ธ๋ ์ ํ(ๅฎ่กใใใใผใใๅถ้) ํญ๋ชฉ์์ ์์์ ์ค์ ํ ๋ ธ๋ ์ด๋ฆ์ ๋ฃ์.