Centos配置Jenkins+Android+fir+pyger(蒲公英)+qiniu(七牛)

一.Java環(huán)境配置

1.1 安裝SDKMAN

#如果沒(méi)安裝unzip的話(huà)
$ yum install unzip
$ yum install zip curl -s [https://get.sdkman.io](https://get.sdkman.io) | bash

安裝完畢后初始化sdkman的配置

$ source "$HOME/.sdkman/bin/sdkman-init.sh"

注意://如果沒(méi)有權(quán)限 前面加 sudo

 $ sudo source "$HOME/.sdkman/bin/sdkman-init.sh"

1.2 安裝Java

#查看可安裝java
$ sdk list java

選取Java版本并安裝(我選擇的是8.0.191-oracle)

$ sdk install java 8.0.191-oracle

注意:
1.利用sdkman安裝的sdk,不需要手動(dòng)配置全局環(huán)境(sdkman已經(jīng)自動(dòng)配置)
2.安裝位置為/root/.sdkman/candidates/java

二.安裝git

$ yum install git

三.安裝Android編譯環(huán)境

3.1從官方網(wǎng)站下載命令行工具最新版 https://developer.android.com/studio/index.html

(我將Android的tools放在/user/local/bin/android-sdk目錄內(nèi))

$ cd /user/local/bin
$ mkdir android-sdk

選取最新版tools下載(當(dāng)前為sdk-tools-linux-4333796)

$ wget --output-document=android-sdk.zip --quiet https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip

3.2 更新SDK

unzip 一下后進(jìn)入目錄(android命令已過(guò)期,建議用/tools/bin/sdkmanager命令工具)
選擇更新自己需要的build-tools以及sdk(我需要的是android-28)

 $ ./android update sdk --no-ui --all --filter android-28,platform-tools,build-tools-28.0.3,extra-android-m2repository

在64位的機(jī)器上運(yùn)行android的工具需要安裝一些32位的庫(kù):

$ yum install glibc.i686 libgcc.i686 libstdc++.i68

如果在安裝libgcc的時(shí)候提示版本沖突,請(qǐng)更新系統(tǒng):

$ yum update

3.3 安裝NDK

#進(jìn)入android-sdk目錄
$ cd /usr/local/bin/android-sdk

選擇最新版ndk下載(當(dāng)前版本為android-ndk-r16b-linux-x86_64)

$ wget https://dl.google.com/android/repository/android-ndk-r16b-linux-x86_64.zip
#解壓
$ unzip android-ndk-r16b-linux-x86_64.zip 
#刪除
$ rm -f android-ndk-r16b-linux-x86_64.zip 
#重命名
$ mv android-ndk-r16b android-ndk

3.4 配置環(huán)境變量

$ vim /etc/profile 

在最后增如下配置

export ANDROID_HOME=/usr/local/bin/android-sdk 
export ANDROID_NDK_HOME=/usr/local/bin/android-sdk/android-ndk 

PATH=$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$ANDROID_HOME/build-tools/28.0.3:$ANDROID_NDK_HOME:$PATH
#刷新
 $ source /etc/profile

四.安裝Jenkins

4.1 安裝

$ sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
$ sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

$ yum install jenkins

4.2 配置

$ vim /etc/sysconfig/jenkins

監(jiān)聽(tīng)端口

JENKINS_PORT="8080"

4.3 配置權(quán)限

為了不因?yàn)闄?quán)限出現(xiàn)各種問(wèn)題,這里直接使用root

修改用戶(hù)為root

$ vim /etc/sysconfig/jenkins

修改配置

JENKINS_USER="root"

4.4 修改目錄權(quán)限

$ chown -R root:root /var/lib/jenkins
$ chown -R root:root /var/cache/jenkins
$ chown -R root:root /var/log/jenkins

4.5 重啟

$ service jenkins restart
#查看是否啟動(dòng)成功
$ ps -ef | grep jenkins

4.6 錯(cuò)誤排查

如果遇到錯(cuò)誤信息為

Starting Jenkins bash: /usr/bin/java: No such file or directory

這是java環(huán)境配置的問(wèn)題。

找到你的jdk目錄,創(chuàng)建軟鏈接即可:

$ ln -s /root/.sdkman/candidates/java/current/bin/java /usr/bin/java

4.7 訪問(wèn)

訪問(wèn)jenkins地址

 http://xxx.xxx.xxx.xxx:8080

注意: 如果修改端口后啟動(dòng)不了,記得把防火墻端口打開(kāi)(阿里云則新增相關(guān)安全組規(guī)則,打開(kāi)端口)

五. 配置Jenkins

5.1初始化Jenkins

按照提示

  • 5.1.1復(fù)制initialAdminPasswor
$ cat /var/lib/jenkins/secrets/initialAdminPassword
  • 5.1.2選擇“安裝推薦的插件”

5.2 全局工具配置內(nèi)增加JDK配置

系統(tǒng)管理->全局工具配置->JDK

name:JDK
JAVA_HOME:/root/.sdkman/candidates/java/current
JDK

注意:gradle、git等不需要配置,用默認(rèn)值即可

5.3 系統(tǒng)設(shè)置內(nèi)增加Andriod環(huán)境變量

系統(tǒng)管理->系統(tǒng)設(shè)置->環(huán)境變量

ANDROID_HOME:/usr/local/bin/android-sdk
ANDROID_NDK_HOME:/usr/local/bin/android-sdk/android-ndk
環(huán)境變量

六. Jenkins新建任務(wù)

6.1 新建任務(wù)

  • 6.1.1 new 任務(wù)->輸入item name->“構(gòu)建一個(gè)自由風(fēng)格的軟件項(xiàng)目”


    new 任務(wù)
  • 6.1.2配置git地址
    輸入項(xiàng)目的git地址,并新建Credentials,將你的用戶(hù)名密碼填進(jìn)去保存即可


    Credentials
  • 6.1.3 填好branch分支(比如master等)


    git

6.2 新增gradle編譯

  • 6.2.1 Add build setp->InvokeGradle script


    gradle
  • 6.2.2 選擇Use Gradle Wrapper
  • 6.2.3 Tasks填寫(xiě)你需要跑的gradle命令


    gradle wrapper

注意:此處要選擇“Use Gradle Wrapper”,這樣可以根據(jù)項(xiàng)目的gradle版本自動(dòng)適配。也可以省去配置gradle的麻煩。

七. 上傳fir或者蒲公英pgyer

這兩個(gè)都情況比較類(lèi)似,只要安裝相應(yīng)的Jenkins插件并配置一下即可。步驟比較簡(jiǎn)單,不再展開(kāi)。

相應(yīng)文檔:

八. 上傳七牛

七牛提供一個(gè)shell工具qshell
我們利用此工具完成jenkins打包上傳,具體見(jiàn):

Qshell文檔

Qshell的Github

8.1 下載qshell并上傳到服務(wù)器相應(yīng)目錄

  • 8.1.1服務(wù)器新建qiniu目錄
$ cd /var/lib/jenkins/workspace
$ mkdir qiniu
  • 8.1.2本地下載qshell_linux_x64并重命名為qshell
  • 8.1.3利用scp將qshell_linux_x64上傳到/var/lib/jenkins/workspace/qiniu
$ scp /path/qshell username@servername:/var/lib/jenkins/workspace/qiniu
  • 8.1.4配置qshell環(huán)境變量
$ vim /etc/profile
#將qshell路徑添加進(jìn)path內(nèi)
export ANDROID_HOME=/usr/local/bin/android-sdk
export ANDROID_NDK_HOME=/usr/local/bin/android-sdk/android-ndk
export QSHELL=/var/lib/jenkins/workspace/qiniu
export PATH=$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$ANDROID_NDK_HOME:$ANDROID_HOME/build-tools/28.0.3:$QSHELL:$PATH
#刷新
$ source /etc/profile

8.2 新增upload.conf 上傳配置文件

在/var/lib/jenkins/workspace/qiniu目錄內(nèi)

$ cd /var/lib/jenkins/workspace/qiniu
$ vim upload.conf
{
"src_dir" : "/var/lib/jenkins/workspace/qiniu/apk",
"overwrite":true,
"key_prefix":"apk/cn/",
"bucket" : "merculet-file"
}

保持并退出。

8.3 新增apk目錄

在/var/lib/jenkins/workspace/qiniu目錄內(nèi)新建apk目錄,用來(lái)保存將要上傳的apk

$ cd /var/lib/jenkins/workspace/qiniu
$ mkdir apk

8.4 配置qshell的account

具體見(jiàn)文檔:
命令行工具(qshell)

復(fù)制七牛賬號(hào)下的 AccessKey 和 SecretKey

$ qshell account AccessKey SecretKey name

其中name表示該賬號(hào)的名稱(chēng)

這樣,我們就可以找jenkins內(nèi)的shell內(nèi)直接調(diào)用qshell的相關(guān)命令了。比如qupload和cdnrefresh

8.5 shell腳本

  • 8.5.1在jenkins內(nèi) Add build step->執(zhí)行 shell


    執(zhí)行 shell
  • 8.5.2在Command添加如下shell腳本,完成七牛上傳以及刷新
#!/bin/bash -ile

#start

#項(xiàng)目名稱(chēng)

PROJECT_NAME="merculet_cn"

#workspace環(huán)境路徑

WORKSPACE_PATH="${JENKINS_HOME}/workspace"

#工程環(huán)境路徑

PROJECT_PATH="${WORKSPACE_PATH}/${PROJECT_NAME}"

#工程環(huán)境路徑

RELEASE_PATH="${PROJECT_PATH}/app/build/outputs/apk/cn/release"

# AndroidManifest.xml路徑

VERSION_CODE_PATH="${PROJECT_PATH}/app/src/main/AndroidManifest.xml"

#1.取版本號(hào)

VERSION_CODE=`cat ${VERSION_CODE_PATH} | sed -n 's/.*android:versionName="\(\S\)/\1/p' | tr -d '[\.">\r]'`

echo ${VERSION_CODE}

APK_NAME="simplet"

QSHELL_PATH="${WORKSPACE_PATH}/qiniu"

#upload.conf環(huán)境路徑,放在jenkins相關(guān)目錄內(nèi)

UPLOAD_PATH="${WORKSPACE_PATH}/qiniu/apk"

#2.拷貝需要上傳的apk

cp ${RELEASE_PATH}/*.apk ${UPLOAD_PATH}/${APK_NAME}.apk

cp ${RELEASE_PATH}/*.apk ${UPLOAD_PATH}/${APK_NAME}${VERSION_CODE}.apk

#3.七牛上傳以及刷新

QINIU_URL1="https://mvpfile.mlinks.cc/apk/cn/${APK_NAME}.apk"

QINIU_URL2="https://mvpfile.mlinks.cc/apk/cn/${APK_NAME}${VERSION_CODE}.apk"

qshell qupload ${QSHELL_PATH}/upload.conf

CDNREFRESH_FILE=${QSHELL_PATH}/cdnrefresh

echo ${QINIU_URL1} > ${CDNREFRESH_FILE}

echo ${QINIU_URL2} >> ${CDNREFRESH_FILE}

qshell cdnrefresh -i ${CDNREFRESH_FILE}

九.寫(xiě)在最后

一開(kāi)始我的阿里云是1核 2G的配置,結(jié)果跑十次有九次報(bào)內(nèi)存不足

java.rmi.UnmarshalException: Error unmarshaling return header; nested exception is
...

或者

HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000feafd000, 53043562, 0) failed; error='Cannot allocate memory' (errno=12)

為了減少Android編譯的資源消耗,根據(jù)Google官方的優(yōu)化您的構(gòu)建速度
以及其他文章,我做了不懈的努力。

包括并不限于減少JVM消耗,減少堆內(nèi)存,關(guān)閉守護(hù)進(jìn)程--no-daemon 還有關(guān)閉并行運(yùn)算parallel等等等等。

終于,經(jīng)過(guò)我的不懈努力,得出了“2G內(nèi)存現(xiàn)在已經(jīng)跑不動(dòng)Android編譯環(huán)境”這個(gè)結(jié)論……

于是我不得不把我的阿里云升到了2核4G的配置。

aliyun1.jpg

aliyun2.jpg

最終我的Jenkins運(yùn)行環(huán)境為:阿里云CentOS 64 2核4G 最低配

如果沒(méi)有其他需求,用突發(fā)性能實(shí)例即可,畢竟我們只是偶爾跑一下,這樣可以省下一大筆銀子。要是純粹為了學(xué)習(xí)配置,可以去華為云那領(lǐng)一個(gè)7天免費(fèi)版。

參考:

https://www.cnblogs.com/stulzq/p/9291237.html
http://www.itdecent.cn/p/5feca12a2ada

http://blog.fir.im/jenkins/
https://www.pgyer.com/doc/view/jenkins_plugin

https://developer.qiniu.com/kodo/tools/1302/qshell
https://github.com/qiniu/qshell

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容