Docker+Jenkins Android 自動化編譯

Docker+Jenkins+Android

注:文章內容或多或少有借鑑,如果侵權,請聯繫我們刪除修改。
Jenkins插件安裝失敗?更新到最新版本就可以了,詳情請查看以下內容。

Docker

Docker 是一個開源的應用容器引擎,它可以讓開發者打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到任何流行的Linux機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何接口。
一個完整的Docker有以下幾個部分組成:

  1. DockerClient客戶端
  2. Docker Daemon守護進程
  3. Docker Image鏡像
  4. DockerContainer容器

Docker 屬於 Linux 容器的一種封裝,提供簡單易用的容器使用接口。它是目前最流行的 Linux 容器解決方案。

而 Linux 容器是 Linux 發展出的另一種虛擬化技術,簡單來講, Linux 容器不是模擬一個完整的操作系統,而是對進程進行隔離,相當於是在正常進程的外面套了一個保護層。

對於容器裏面的進程來說,它接觸到的各種資源都是虛擬的,從而實現與底層系統的隔離。

Docker 將應用程序與該程序的依賴,打包在一個文件裏面。運行這個文件,就會生成一個虛擬容器。

程序在這個虛擬容器裏運行,就好像在真實的物理機上運行一樣。有了 Docker ,就不用擔心環境問題。

總體來說,Docker 的接口相當簡單,用戶可以方便地創建和使用容器,把自己的應用放入容器。容器還可以進行版本管理、複製、分享、修改,就像管理普通的代碼一樣。

Docker 架構

Docker 使用客戶端-服務器 (C/S) 架構模式,使用遠程API來管理和創建Docker容器。Docker 容器通過 Docker 鏡像來創建。容器與鏡像的關係類似於面向對象編程中的對象與類

Docker運用場景

1. Automating the packaging and deployment of
applications(使應用的打包與部署自動化)
2. Creation of lightweight, private PAAS environments(創建輕量、私密的PAAS環境)
3. Automated testing and continuous
integration/deployment(實現自動化測試和持續的集成/部署)
4. Deploying and scaling web apps, databases and backend
services(部署與擴展webapp、數據庫和後臺服務)

Docker的三個概念

  1. Image(鏡像)
  2. Container(容器)
  3. Repository(倉庫)

預習圖示:
來源網絡
提示:具體詳情可以查看>>>docker容器和鏡像區別

Image(鏡像)

Docker 鏡像可以看作是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些爲運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。

鏡像不包含任何動態數據,其內容在構建之後也不會被改變。

鏡像(Image)就是一堆只讀層(read-only layer)的統一視角:

圖示:
來源網絡
如圖左邊我們看到了多個只讀層,它們重疊在一起。除了最下面一層,其它層都會有一個指針指向下一層。這些層是Docker內部的實現細節,並且能夠 在主機(譯者注:運行Docker的機器)的文件系統上訪問到。統一文件系統(union file system)技術能夠將不同的層整合成一個文件系統,爲這些層提供了一個統一的視角,這樣就隱藏了多層的存在,在用戶的角度看來,只存在一個文件系統,就是右邊看到這個視角的形式。

Container(容器)

容器(Container)的定義和鏡像差不多,也是一堆層的統一視角,唯一區別在於容器的最上面那一層是可讀可寫的。
容器 = 鏡像 + 可讀層
來源網絡

Repository(倉庫)

Docker Registry 公有倉庫是開放給用戶使用、允許用戶管理鏡像的 Registry 服務。

一般這類公開服務允許用戶免費上傳、下載公開的鏡像,並可能提供收費服務供用戶管理私有鏡像。

除了使用公開服務外,用戶還可以在本地搭建私有 Docker Registry。Docker 官方提供了 Docker Registry 鏡像,可以直接使用做爲私有 Registry 服務。

當用戶創建了自己的鏡像之後就可以使用 Push 命令將它上傳到公有或者私有倉庫,這樣下次在另外一臺機器上使用這個鏡像時候,只需要從倉庫上 Pull 下來就可以了。

注:由於Docker hub 服務器在國外,無法上傳鏡像(提示超時),本文采用阿里雲服務存儲。

Docker視頻地址

http://www.jsdaima.com/video/490.html
http://www.jsdaima.com/video/459.html
http://www.jsdaima.com/video/384.html
http://www.jsdaima.com/video/371.html
http://www.jsdaima.com/video/363.html

Jenkins

Jenkins是一個開源軟件項目,是基於Java開發的一種持續集成工具,用於監控持續重複的工作,旨在提供一個開放易用的軟件平臺,使軟件的持續集成變成可能。
注:持續集成是一種軟件開發實踐,即團隊開發成員經常集成他們的工作,通常每個成員至少集成一次,也就意味着每天可能會發生多次集成。每次集成都通過自動化的構建(包括編譯,發佈,自動化測試)來驗證,從而儘快地發現集成錯誤。許多團隊發現這個過程可以大大減少集成的問題,讓團隊能夠更快的開發內聚的軟件。

Jenkins中文教程文檔

https://jenkins.io/zh/doc/pipeline/tour/getting-started/

安裝(簡單粗暴)

注:環境>>>macOS,其他平臺大同小異!

docker安裝

1.== 打開docker官網並且下載mac docker桌面版(需要註冊docker賬號),下載後安裝即可。==
Docker官網
docker下載
2. 在啓動臺中打開,效果如下:
啓動臺應用圖標
狀態欄中顯示的docker
到此docker安裝成功。

jenkins安裝

注:以下操作在終端完成!!

  1. 打開控制檯(終端)
    在這裏插入圖片描述
  2. 按順序輸入命令:

docker pull jenkins/jenkins
下載jenkins

docker run -d --name 容器名稱 -p 8080:8080 -p 50000:50000 jenkins/jenkins
創建容器

docker ps -a
查看容器列表是否生成 ”容器名稱“ 的 容器

docker start 容器名稱
運行容器

docker ps
查看容器是否運行

docker logs 容器名稱
查看jenkins運行的日誌 找到init…pass

效果圖:
在這裏插入圖片描述
解析:終端運行以下命令查看容器運行日誌信息;注意以下列出部分:

docker logs -f android01




Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

a8ae880e37a7449d811224b452427dbr

This may also be found at: /var/jenkins_home/secrets/initialAdminPassword




a8ae880e37a7449d811224b452427dbr

這個是初始設置密碼,複製後打開主機瀏覽器,輸入地址:http://localhost:8080

等待加載後出現Jenkins界面:把終端複製的密碼粘貼進去。
管理員密碼就是從終端複製的密碼
接着接續走下一步:
按需求選擇
選擇需要Jenkins的插件(版主的無需修改任何url,全部插件都能下載安裝!):
在這裏插入圖片描述
等待插件下載安裝完成:
在這裏插入圖片描述
跳過實例配置提示框後配置登錄用戶和密碼。完成後點擊“開始使用Jenkins”;
在這裏插入圖片描述
最終頁面:
在這裏插入圖片描述
到此,安裝完成!

附加Docker命令

在這裏插入圖片描述

docker run -it -d --name test-centos1 centos

命令註釋:-it : 進行交互式操作
     -d : 等同於 -d=true,容器將會在後臺運行,不然執行一次命令後,退出後,便是exit狀態了。
     --name : 容器啓動後的名字,默認不指定,將會隨機產生一個名字。或者使用 -name=“containers_name”
     centos:使用的鏡像名稱

Android自動化編譯部署

配置工程

配置Android SDK

先拷貝主機的 android sdk 到 docker 容器中

docker cp -r /Users/yao/Library/Android/sdk/ jenkkins:/root/home/Android/sdk
dcker cp -r 本地目錄 容器名稱:容器中的具體路徑

點擊系統管理然後選着 系統設置,找到全局屬性勾選環境變量
增加鍵值對,最後點擊保存
例如:
在這裏插入圖片描述

配置Gradle

點擊系統管理然後點擊全局工具配置
配置Git;JDK;Gradle,最後保存。

  1. JDK和Git可以不用配置了,如果使用的Jenkins/Jenkins的鏡像 系統默認已經安裝好openjdk8,所以不用做任何操作(根據個人需求再定)
    如何查看容器中是否安裝好jdk?
    【注意命令】
    在這裏插入圖片描述
  2. 至於Gradle 可以按照配置android sdk的做法重本地拷貝到容器中就好。
    也可以點擊新增Gradle的方式來添加。最後保存!
    如圖片中的方式2選一 即可
    在這裏插入圖片描述

創建工程

  • 點擊–新建任務
  • 輸入任務名稱,例如:yyyy
  • 選着–構建一個自由風格的軟件項目
  • 最終點擊確定

如圖:
在這裏插入圖片描述
項目配置頁面
使用的是 github 項目

  • 找到 源碼管理 選擇 Git,配置好git 源碼地址 github的賬號和密碼
    在這裏插入圖片描述

  • 找到添加構建步驟 選擇 Invoke Gradle script,這裏選着上面配置的是gradle X.X
    如下圖:
    在這裏插入圖片描述
    最後保存就好了!
    測試是否能自動編譯,進入工程,點擊立即構建
    在這裏插入圖片描述
    工作空間就是android studio的一個基本工程:
    在這裏插入圖片描述
    至於工程配置中其他選項就不多說了(釘釘機器人;顯示二維碼需要用到的jar包:生成二維碼Jar包工具):
    在這裏插入圖片描述
    注意要將二維碼圖片展示在歷史構建列表中貌似就可以實現了,能直觀想到的方式就是採用HTML的img標籤,將寫入到build描述信息中。

    這個方法的思路是正確的,不過這麼做以後並不會實現我們預期的效果。

    這是因爲Jenkins出於安全的考慮,所有描述信息的Markup Formatter默認都是採用Plain text模式,在這種模式下是不會對build描述信息中的HTML編碼進行解析的。

    要改變也很容易,Manage Jenkins -> Configure Global Security,將Markup Formatter的設置更改爲Safe HTML即可。

如有問題可以留言!感謝糾正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章