1. 程式人生 > >Unity Jenkins打包 部署

Unity Jenkins打包 部署

Jenkins 打包Unity APK

新建一個Unity 工程,新增編輯器打包指令碼

編輯器指令碼 APKBuild.cs 
編輯狀態下呼叫 APKBuild中 Build 方法,執行打包, 
測試成功開始編寫 批處理指令碼 Unity.bat 通過批處理指令碼呼叫 APKBuild中 Build 方法 執行打包 
執行批處理打包成功開始在Jenkins新建專案

APKBuild.cs 程式碼如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;


public
class APKBuild : Editor { [MenuItem("Tool/APKBuild")] public static void Build() { BuildTarget buildTarget = BuildTarget.Android; // 切換到 Android 平臺 EditorUserBuildSettings.SwitchActiveBuildTarget(buildTarget); // keystore 路徑, G:\keystore\one.keystore PlayerSettings.Android.keystoreName = "G:\\keystore\\one.keystore"
; // one.keystore 密碼 PlayerSettings.Android.keystorePass = "123456"; // one.keystore 別名 PlayerSettings.Android.keyaliasName = "bieming1"; // 別名密碼 PlayerSettings.Android.keyaliasPass = "123456"; List<string> levels = new List<string>(); foreach
(EditorBuildSettingsScene scene in EditorBuildSettings.scenes) { if (!scene.enabled) continue; // 獲取有效的 Scene levels.Add(scene.path); } // 打包出 APK 名 string apkName = string.Format("./{0}.apk", "Test"); // 執行打包 string res = BuildPipeline.BuildPlayer(levels.ToArray(), apkName, buildTarget, BuildOptions.None); AssetDatabase.Refresh(); } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

在編輯器下可以呼叫 Build() 方法執行打包 APK

新建批處理指令碼 Unity.bat

H:\Unity\Unity\Editor\Unity.exe -projectPath G:\MyProject\AndroidSDKUnityDemo\AndroidSDKDemo -quit -batchmode -executeMethod APKBuild.Build -logFile build.log
  • 1

引數介紹

H:\Unity\Unity\Editor\Unity.exe 為Unity 安裝執行檔案

-projectPath 執行Unity遊戲工程

G:\MyProject\AndroidSDKUnityDemo\AndroidSDKDemo 為Unity 工程目錄 Assets 上一層目錄

-quit 表示執行結束自動退出

-executeMethod 表示執行 編輯器方法

APKBuild.Build  APKBuild 為編輯器指令碼 APKBuild.cs , 中APKBuild.cs Build 函式名
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

最終 Unity.bat 指令碼

@echo off  

echo 正在生成APK檔案...  

REM H:\Unity\Unity\Editor\Unity.exe -projectPath G:\MyProject\AndroidSDKUnityDemo\AndroidSDKDemo -quit -batchmode -executeMethod APKBuild.Build -logFile build.log

%1 -projectPath %2 -quit -batchmode -executeMethod APKBuild.Build -logFile build.log

echo APK檔案生成完畢!  
pause 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

上面 %1 %2 我通過在執行批處理指令碼的時候將引數傳遞進來

將 Unity.bat 放在 Unity 專案根目錄(和 Assets 同級) 
這裡寫圖片描述

將Unity 工程上傳到 SVN伺服器

開始Jenkins 
新建一個新工程 
這裡寫圖片描述

這裡寫圖片描述

下一步彈出配置介面 
這裡寫圖片描述

原始碼管理

中選擇 SubVersion 配置SVN 路徑和使用者名稱密碼 
這裡寫圖片描述

點選 Add 新增一個使用者名稱和密碼 
這裡寫圖片描述

Check -out Strategy 中配置每次構建時執行的 SVN update命令(每次構建時會將SVN 中最新的專案更新到 Jenkins 的工作空間WORKSPACE)

如我本地的Jenkins 工作空間位置,Jenkins新建的專案都會放在 workspace 下

C:\Users\Dev\.jenkins\workspace\
  • 1

構建中選擇 Windows 批處理, 
這裡寫圖片描述 
第一行列印一個 HelloWorld 
第二行執行 Unity.bat 後邊兩個引數 分別傳遞給批處理中 %1,%2

%WORKSPACE% 是Jenkins 中可用的環境變數,表示該專案在Jnekins 中的目錄位置
本專案在Jenkins 為 TestDemo則 %WORKSPACE% 在我本地為 C:\Users\Dev\.jenkins\workspace\TestDemo
  • 1
  • 2

配置完成儲存,執行構建(構建時要將 Unity 關掉) 
這裡寫圖片描述

可以檢視日誌 
這裡寫圖片描述

等待構建 
構建完成後開啟工作空間,發現目錄下生成一個 Test.apk 表示 APK 生成成功 
這裡寫圖片描述

下面來看下我的 Unity 工程和 Jenkins 工程的關係

Unity Demo工程目錄如下 
這裡寫圖片描述

Unity Demo工程上傳到 SVN 伺服器

在 Jenkins 中新建TestDemo專案,在 TestDemo配置中 新增 Demo工程上傳的 SVN 伺服器路徑

Jenkins 在構建構建時會從 SVN 伺服器將 Demo 工程 CheckOut 到 Jenkins 的工作空間中 TestDemo 專案下 
這裡寫圖片描述

開啟 TestDmeo 資料夾,我已經執行過構建了, Jenkins 已經從 SVN 上更新了最新的專案到 工作空間中 
這裡寫圖片描述

然後我在執行 Unity.bat 時,將 %WORKSPACE% 在我本地為(C:\Users\Dev.jenkins\workspace\TestDemo)傳遞了進去,即執行的 打包工程是Jenkins 工作空間的這個工程

每次修改Unity Demo 工程,將修改提交到 SVN,然後再執行 Jenkins 構建

mac部署

  1. 下載Jenkins war安裝包
    Jenkins下載地址,下載war安裝包

    mac jenkins war安裝包.png
  2. 安裝Tomcat

要注意的是jdk版本,選擇jdk8,不然執行jenkins會報錯:jdk下載地址

報錯日誌:Stack trace
java.lang.AssertionError: InstanceIdentity is missing its singleton
org.jenkinsci.main.modules.instance_identity.InstanceIdentity.get(InstanceIdentity.java:133)
at org.jenkinsci.main.modules.instance_identity.InstanceIdentityRSAProvider.getKeyPair(InstanceIdentityRSAProvider.java:23)
at jenkins.model.identity.InstanceIdentityProvider$KeyTypes.get(InstanceIdentityProvider.java:161)
at jenkins.model.identity.InstanceIdentityProvider$KeyTypes.getKeyPair(InstanceIdentityProvider.java:210)
at jenkins.model.identity.IdentityRootAction.getUrlName(IdentityRootAction.java:42)
at jenkins.model.Jenkins.getDynamic(Jenkins.java:3635)
...
Caused: javax.servlet.ServletException
at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:765)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:649)
at org.kohsuke.stapler.Stapler.service(Stapler.java:238)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)

jdk9報錯截圖.png

如果mac下已經安裝多版本JDK,可以按照Mac下多版本JDK安裝來設定/切換使用版本

Tomcat安裝包選擇tar.gz版: Tomcat下載地址

安裝Tomcat完成後:

  1. 將下載的Jenkins war包,放入之前Tomcat資料夾下/webapps資料夾中。

  2. 載入成功會讓輸入密碼,密碼在圖中紅色的路徑檔案裡面


    密碼路徑,copy.png
  3. 建議點選推薦安裝 Install suggests plugins

tomcat啟動.pngjenkins預設工作目錄.png

目錄:

  1. credentials使用kind: Username and password
  2. credentials使用kind: SSH Username private key
    2.1 SSH基礎;什麼是ssh?什麼是公鑰?什麼是私鑰?什麼是數字簽名、數字證書?
    2.2 配置SSH Username private key credentials的5個步驟
    2.3 git ssh正確情況截圖
    2.4 報錯情況處理:code 128:Permission denied (publickey)

git配置(GitHub)

git配置主要是設定credentials,常用的有2種方式:

1. kind: Username and password

kind-userName with password.png

如何驗證這種方式是否有效呢?

  1. 新建 自由風格的軟體專案


    構建自由風格的軟體專案.png
  2. 只需配置原始碼管理這一項,注意URL要HTTPS(在github上建立一個repositories 或者使用 測試使用:github UnityJenkins工程地址),credentials選擇剛剛建立的Username and password,儲存。

    git credentials-userName and password.png
  3. 立即構建,若成功,在~/.jenkins/workspace中可以看到clone到的工程;若失敗,檢查賬號密碼。


    Jenkins git clone成功到workspace.png

2. kind: SSH Username private key

2.1 SSH基礎

使用SSH這種方式,需要明白什麼是ssh?什麼是公鑰?什麼是私鑰?什麼是數字簽名、數字證書?

如果都明白,可以跳過下面3個連結:

2.2 配置SSH Username private key credentials的5個步驟

接下來生成一個SSH Username private key credentials

這個GitHub官方ssh連結 說明的非常詳細,能看懂就參照這個連結一步步做

大概分為以下幾步:

  1. Checking for existing SSH keys,檢查SSH keys是否已存在,如果id_dsa(私鑰)、id_dsa.pub(公鑰)已存在,跳過2、3步驟,若不存在則生成
  2. Generating a new SSH key and adding it to the ssh-agent,生成新的SSH key,並新增到ssh-agent。這時候按第一步檢查,id_dsa(私鑰)、id_dsa.pub(公鑰)已存在則成功。
  3. Jenkins配置credentials,將id_dsa(私鑰)的內容copy到SSH Username private key credentials中(private key選擇enter directly),Username、ID隨意。
kind-ssh private key.png

2.3 git ssh正確情況截圖

git ssh正確情況截圖.png

2.4 報錯情況處理:code 128:Permission denied (publickey)

若出現code 128:Permission denied (publickey)的報錯,說明ssh key credentials沒有配置對。

按照上面5個步驟檢查一遍。用第四步檢查GitHub上是否配置成功,若成功,檢查id_dsa(私鑰)的內容copy過程有沒有遺漏,private key是否正確。

構建失敗日誌: ERROR: Error cloning remote repo 'origin'
hudson.plugins.git.GitException: Command  returned status code 128:
stdout: 
stderr: Permission denied (publickey).
fatal: Could not read from remote repository.
git ssh key設定有誤報錯.png

解決完code 128:Permission denied (publickey)報錯,按1.1的方式驗證是否能成功clone工程。
區別是URL要SSH,例如[email protected]:GeWenL/UnityJenkins.git,如“git ssh正確情況截圖.png”所示。





相關推薦

Unity Jenkins打包 部署

Jenkins 打包Unity APK新建一個Unity 工程,新增編輯器打包指令碼編輯器指令碼 APKBuild.cs 編輯狀態下呼叫 APKBuild中 Build 方法,執行打包, 測試成功開始編寫 批處理指令碼 Unity.bat 通過批處理指令碼呼叫 APKBuil

Ubantu Jenkins打包部署二:專案配置

打包過程發生錯誤。不能建立資料夾。 錯誤資訊如下。 14:40:18.864 [DEBUG] [org.gradle.model.internal.registry.DefaultModelRegistry] Project :app - Registering mo

jenkins 自動打包部署爬蟲專案

        最近因工作需要,負責看護公司的生產環境,有16臺生產服務節點,所以必須得引入自動化管理工具,不然我可不得累死啊。本文記錄一下在使用Jenkins釋出過程的整個過程。 1.啟動Jenkins服務 2.登陸網頁 3.配置

docke+jenkins+git自動打包部署(2)--jenkins網頁配置

上篇將jenkins在伺服器上跑起來了,這篇主要是將jenkins的外掛安裝和系統配置設定一下 瀏覽器輸入10.17.191.211:8080(上篇中跑jenkins的伺服器) 一、這裡的pas

docker+jenkins+git自動打包部署(1)

經過幾天的摸索還有大神的指導,終於把jenkins的自動部署搞定了,但是大神的操作還是不太懂,先記錄著,邊摸索邊記錄,省得忘掉了。 在網上查的jenkins的部署都是裝tomcat然後再tomcat下部署神馬的,可是我要的是docker下載jenkin

Jenkins實現前端專案自動化整合打包部署

前言: 為了前端專案的工程化,減少專案釋出環境的部署,實現自動化整合打包部署。 本文是針對前端專案和gitlab倉庫程式碼,簡述jenkins實現自動化部署的配置流程。 jen

Jenkins配置-打包部署maven專案

環境:windows10 64位 1.下載jenkins安裝包 2.部署jenkins.war 準備tomcat,我的版本為apache-tomcat-7.0.56;將jenkins.war放在tomcat的webapps下,然後啟動tomcat,啟動完成後在位址列

Jenkins自動打包部署專案

個人下載是長期穩定的那個版本,下載後,得到一個.msi的安裝包: 點選進行安裝,然後一直點選下一步。 jenkins會自動佔用8080埠,如果這個埠不希望被jenkins佔用,可以去資料夾裡的這個檔案進行修改: 修改後,需要去服務裡面進行jenkin

Jenkins中的專案打包部署到遠端Tomcat

Jenkins構建成功之後,可以在/usr/local/JenkinsHome/workspace中看到 在系統管理-外掛管理-已安裝外掛中,檢視publish over ssh是否安裝 hostname設定 192.168.0.239  為SVN、Nexus

DevOps系列——Jenkins/Gitlab自動打包部署

前面只說了DevOps的兩個基礎元件Jenkins和GitLab,客官也不要著急,我們玩就玩的深入一點,Gitlab和Jenkins的各種配置和 外掛很多,也夠啃一陣子的,不要照著操作一通就感覺萬事大吉了,多做些邊緣測試,多玩點不一樣的操作,那今天我們來點 實戰整合加強訓練。 作者原創文章,謝絕一切轉載,違者

Jenkins打包安卓時提示沒同意constraintLayout的license的解決方法

失敗 studio 使用 you 安裝目錄 目錄 nbsp cnblogs bin文件 使用Jenkins打包安卓項目時,報錯並失敗,錯誤信息: You have not accepted the license agreements of the following

jenkins自動部署

jenkins自動部署 ansible 準備的東西ip.txt192.168.1.10192.168.1.10192.168.1.10auto_deploy_war.sh#!/bin/bash#Auto deploy Tomcat for jenkins perf#by author wugk 201

打包部署到tomcat

服務器 nbsp 啟動tomcat 瀏覽器緩存 eclips idea group -i 修改 部署到tomcat的方法 註意:在eclipse 或 idea 上需要引入外部tomcat 1.將程序打成war包啟動tomcat 2.將target 文件下內容壓縮城zi

Unity資源打包之Assetbundle

nas rar 啟用 大致 ebp 掛載 href 交叉 bundle 本文原創版權歸 csdn janeky 全部。轉載請具體註明原創作者及出處,以示尊重。 作者:janeky 原文:http://blog.csdn.net/janeky/article/detail

Maven打包部署

9.png org app clip run png maven打jar pri jar包 Maven打Jar包 問題一 Eclipse突然SB告訴我類不存在還讓我導包進來O__O "…,但是我明明有這個類。這是不要慌,通過在網上搜索得知:由於eclipse的編譯是基於時間

jenkins實戰之jenkins安裝部署(二)

自動化運維 上一小節介紹了Jenkins安裝(Linux/uninx平臺),這節我們講講Jenkins界面操作(包括系統設置,工具安裝,插件管理,系統升級,安全設置等等操作); 登錄jenkins首頁,分別有以下選項欄,從左側看起,點擊Jenkins系統管理我們會看到右側list欄,內

jenkins介紹部署及三種構建方式配置

構建 簡單 nbsp adding linu tle ref pass 默認 [隱藏] 1前言 1.1jenkins介紹 1.2jenkins好處 1.3我的jenkins實踐 1.4jenkins使用前提 2jenkins部署 2.1下面內容介紹 2.2環境介紹

打包部署常用命令

測試環境對應Jenkins項目:/data/jenkins/workspace查看端口狀態:netstat -adp | grep 8092 查看 進程id:ps -ef | grep 3532開發提供:applications.properties配置文件:server.xml/conf/web.xmlco

Jenkins 自動化部署-安裝篇(一)

public 參考 ane cnblogs 用戶 repo candidate -s 配置 Centos7上安裝Jenkins 安裝 sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redh

Jenkins~簡單部署及使用

oracl www pan host bre 第三方 inux nvi local 在此註意:新版的jenkins.war包需要JDK1.8版本的支持,否則安裝失敗! 源碼包下載地址 JAVA:http://www.oracle.com/technetwork/java