1. 程式人生 > >邊緣化搭建DotNet Core 2.1 自動化構建和部署環境(上)

邊緣化搭建DotNet Core 2.1 自動化構建和部署環境(上)

寫在前面

  寫這篇文章的緣由是由於筆者的對新興技術方向有所追求,但個人資產有限,只能容許購買一臺阿里雲低配1核2G伺服器。伺服器上搭建了 Centos7 & Docker & Jenkins & ASP.NET Core 2.0 自動化釋出和部署 環境後犧牲了大部分效能。造成了一個基於angular編寫的前端應用無法自動構建,構建時一直出錯,通過錯誤資訊各種搜尋並無任何結果。經過反反覆覆的的試驗,用一臺1核1G的Debain虛擬機器去手動構建併成功,最後經過排查,確定是因為基於Java執行時的Jenkins對記憶體造成了一個巨大的佔用。無奈之舉,因為窮,導致不能升級伺服器,但又想享受自動構建帶來的快感,只好另闢蹊徑,將Jenkins這個自動化構建和部署服務進行邊緣化,以便去享受自動化構建和部署帶來的快感。本文章考慮篇幅問題分為上下兩篇。

先決條件

一塊根據教程安裝Debain系統的樹莓派2B+ (低於2B+型號的樹莓派效能沒經過試驗,讀者可以嘗試)

樹莓派安裝Docker CE

  本文已根據教程安裝Debain系統,接下來安裝的Docker的操作過程都是基於Debain系統,若讀者的樹莓派安裝的是其他版本的系統,可另閱讀Docker官方提供的安裝操作說明,本文就不提供其他系統版本的操作步驟了。

設定Docker源倉庫

1.更新 apt 包索引:

$ sudo apt-get update

2.安裝包

$ sudo apt-get -y install \
     apt
-transport-https \ ca-certificates \ curl \ gnupg2 \ software-properties-common

3.新增Docker的官方GPG金鑰:

$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88

4.設定穩定的Docker源倉庫

$ echo "deb [arch=armhf] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | \ sudo tee /etc/apt/sources.list.d/docker.list

安裝Docker CE

1.更新 apt 包索引:

$ sudo apt-get update

2.安裝最新版本的Docker CE

$ sudo apt-get install docker-ce

3.執行Hello World 測試

$ sudo docker run armhf/hello-world

構建映象

  因為樹莓派本身的CPU架構是ARM,部落格園存在大量基於docker搭建Jenkins環境的教程,所依賴官方的映象都是基於x86架構的CPU構建的,所以我們需要重新根據ARM架構的CPU去構建一個可以執行的Jenkins映象。並通過通過二次自定義構建的方式,修改映象本身的配置資訊。

  Jenkins官方在Docker Hub上面的映象是沒有ARM版本的,如果直接使用官方在Dokcer Hub上的映象直接自定義構建會出現錯誤。筆者在GitHub上找到一個Jenkins for Docker on Raspberry Pi的專案,裡面包含構建Jenkins的Dockerfile。經過筆者的反覆驗證,排除網路環境,裝置原因,確信這個專案的Dockerfile是存在問題的。筆者到這裡曾經想過放棄,但是既然都這麼窮,又沒有錢買新的雲服務,只好繼續硬著頭皮往下研究出現錯誤的原因。最後經過不斷的試驗,成功解決了這個問題,隨後筆者Fork這個專案修復問題並提交到GitHub。如果真正嘗試構建ARM版本失敗的讀者,看了這篇文章之後,就少走彎路了。專案GitHub地址:https://github.com/Loongle/rpi-jenkins

構建Jenkins ARM映象

1.克隆GitHub專案:

$ git clone https://github.com/Loongle/rpi-jenkins

2.進入專案並開始構建:

$ cd rpi-jenkins
$ sudo docker build . -t jenkins

3.讀者可以忽略此步驟,直接到構建自定義映象的操作。

構建自定義映象

  單純的直接構建Jenkins並不能符合本文的主題,現在我們需要通過自定義Dockerfile來擴充我們原本的Jenkins環境設定。當然,如果直接修改筆者GitHub專案裡的Dockerfile進行構建,那麼這一步也是可以忽略的。見仁見智,看讀者喜歡怎麼方便怎麼來,喜歡怎麼折騰就怎麼折騰,此處構建沒有固定的操作方式,只要能確保樹莓派能執行Jenkins就Ok啦。

1.新建Dockerfile:

$ cd ~
$ sudo nano Dockerfile

2.檢視docker組id:

cat /etc/group

3.在Dockerfile插入如下程式碼後,執行儲存:

FROM jenkins  # 可將jenkins 替換 loongle/rpi-jenkins:latest 以解決自己構建Jenkins映象速度慢的問題
USER root

ARG dockerGid=996 # 填寫/etc/group查到的id

#切換阿里雲加速 RUN
echo '' > /etc/apt/sources.list.d/jessie-backports.list \ && echo '' > /etc/apt/sources.list \ && echo '' > /etc/apt/raspi.list \ && echo "deb http://mirrors.aliyun.com/raspbian/raspbian/ stretch main contrib non-free rpi" > /etc/apt/sources.list \ && echo "deb-src http://mirrors.aliyun.com/raspbian/raspbian/ stretch main contrib non-free rpi" >> /etc/apt/sources.list \ && echo "deb https://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ jessie main" >> /etc/apt/sources.list.d/raspi.list
#安裝依賴關係 RUN apt
-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg2 \ software-properties-common
#安裝docker-compose RUN
wget https://bootstrap.pypa.io/get-pip.py \ && python get-pip.py \ && pip install docker-compose RUN echo "docker:x:${dockerGid}:jenkins" >> /etc/group #修改時區 RUN rm -rf /etc/localtime && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ && echo 'Asia/Shanghai' > /etc/timezone USER jenkins

 4.自定義Dockerfile執行構建:

$ sudo docker build . -t auto-jenkins

5.等待構建完成後,啟動 Jenkins 即可:

$ sudo docker run --name=jenkins --restart=always --add-host master:192.168.6.200 -p 8080:8080 -p 50000:50000 -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/bin/docker -v /var/jenkins_home:/usr/local/jenkins/ -d auto-jenkins

 

寫在後面

  至此,我們已經成功在樹莓派上執行 Jenkins ,筆者將在下一篇中講述從樹莓派上的Jenkins構建專案併發布到雲伺服器上的Docker環境中。希望正在螢幕上閱讀本文的你,能順利在樹莓派上執行你的Jenkins 環境。構建途中出現任何疑問,歡迎在評論區中留言。

 

參考文獻

https://docs.docker.com/install/linux/docker-ce/debian/

https://github.com/Loongle/rpi-jenkins