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

寫在前面

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

先決條件

一塊根據教程安裝Debain系統的樹莓派2B+ (低於2B+型號的樹莓派性能沒通過試驗,讀者能夠嘗試)前端

樹莓派安裝Docker CE

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

設置Docker源倉庫

1.更新 apt 包索引:linux

$ sudo apt-get update

2.安裝包git

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

3.添加Docker的官方GPG密鑰:github

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

4.設置穩定的Docker源倉庫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 包索引:bootstrap

$ 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

相關文章
相關標籤/搜索