全新服務器搭建 Jenkins+Docker+Gradle+Nodejs 環境以實現自動化部署

轉載請註明原創出處,謝謝!

HappyFeet的博客

在開發過程中,如果每次交付給測試時都需要手動的對代碼進行構建和部署,這無疑是一件較爲繁瑣的過程,如果能夠讓其一鍵完成,無疑可以節省人力勞動並降低時間開銷。這就是我們通常說的自動化部署。

最近接手了公司的一個新項目,所幸有機會自己獨立搭建這樣一套自動化部署環境。雖然有些地方不那麼完美,但是已經能夠一鍵部署了,也還是不錯的。

下面就是搭建的大致步驟、搭建過程中遇到的問題及解決辦法。

注意:本文基於 `Red Hat` 環境,初始狀態爲:一個 `root` 用戶,存在 `yum` 命令可以調用,`Red Hat` 版本信息如下:
	
Linux iZ9ni05eeu3wg5xwyjnt5gZ 3.10.0-514.6.2.el7.x86_64 #1 SMP Thu Feb 23 03:04:39 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

一、新建用戶和用戶組(參考博文:Linux學習-給普通用戶加sudo權限

首先需要添加一個新用戶 HappyFeet,所有操作應該基於新用戶來進行,而不是 root 用戶,因爲 root 權限太高,稍有不慎就可能出大問題。

1、添加用戶組
groupadd HappyFeet
2、添加用戶,並指定用戶組
useradd -g HappyFeet HappyFeet
3、給用戶設置密碼(輸入密碼2次)
passwd HappyFeet
4、給新用戶添加 sudo 權限

切換至 root 帳號,執行 visudo ,找到 root ALL=(ALL) ALL,在其後面新增一行:HappyFeet ALL=(ALL) ALL 即可。

二、zsh 配置

1、安裝 git
sudo yum install git
2、安裝 zsh(參考文檔:Installing zsh – the easy way
sudo yum install zsh
3、安裝 on my zsh(參考官方文檔:Install oh-my-zsh now
4、安裝提示工具 zsh-autosuggestions(參考官方文檔:zsh-autosuggestions,可裝可不裝,一款提示工具)
5、通過 ssh-keygen 生成 ssh key,然後將自己的 public key 加至 authorized_keys 文件中,後面即可通過 ssh username@host 登錄服務器,方便快捷。(這也是個可選項,如果不這樣配置的話每次 ssh 時都需要輸密碼,就會很麻煩)

參考鏈接:How to ssh to remote server using a private key?

6、.zshrc 添加別名(僅是別名配置,可以忽略不管)

~/.zshrc 文件中新增一行:alias ll="ls -alh"

三、安裝 Docker(參考官方文檔:Get Docker CE for CentOS,服務器爲 Red Hat 版本,按照 centos 版安裝 docker ce 社區版本)

1、Install required packages.
sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2
2、Use the following command to set up the stable repository.
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
3、Install the latest version of Docker CE.
sudo yum install docker-ce
4、啓動.
sudo systemctl start docker
5、使用 docker ps 報如下錯誤
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.39/containers/json: dial unix /var/run/docker.sock: connect: permission denied

解決方案爲:將當前用戶加入 docker 用戶組(參考鏈接:docker.sock permission denied

➜  ~ echo $USER
HappyFeet
➜  ~ sudo usermod -aG docker $USER

四、安裝 openjdk(參考官方文檔:How to download and install prebuilt OpenJDK packages

1、安裝 openjdk
su -c "yum install java-1.8.0-openjdk-devel"

需要注意的是,需要安裝 develop 版的,不帶 devel 後綴的是 jre 環境。

2、添加 JAVA_HOME、JRE_HOME 環境變量(gradle 會用到)
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64
export JRE_HOME=${JAVA_HOME}/jre

export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

export PATH=$PATH:${JAVA_HOME}/bin

五、安裝 gradle

1、下載 bin.zip(個人喜歡用.zip安裝,知道安裝在哪,所有都是由自己掌控,下載鏈接:download gradle
2、解壓至指定路徑
$ mkdir ~/tools/gradle
$ unzip -d ~/tools/gradle gradle-4.6-bin.zip
$ ls ~/tools/gradle/gradle-4.6
LICENSE  NOTICE  bin  getting-started.html  init.d  lib  media
3、添加 GRADLE_HOME 至 .zshrc
export GRADLE_HOME=/home/HappyFeet/tools/gradle/gradle-4.6
export PATH=$PATH:${GRADLE_HOME}/bin
4、gradle -v 驗證,輸出如下:
➜  ~ gradle -v

------------------------------------------------------------
Gradle 4.6
------------------------------------------------------------

Build time:   2018-02-28 13:36:36 UTC
Revision:     8fa6ce7945b640e6168488e4417f9bb96e4ab46c

Groovy:       2.4.12
Ant:          Apache Ant(TM) version 1.9.9 compiled on February 2 2017
JVM:          1.8.0_191 (Oracle Corporation 25.191-b12)
OS:           Linux 3.10.0-514.6.2.el7.x86_64 amd64

六、安裝 jenkins

1、下載war包(Getting started with Jenkins,Generic Java package (.war)版本)
2、編寫 start_jenkins.sh 腳本
#!/bin/sh
export JENKINS_HOME=/home/HappyFeet/tools/jenkins
export COPY_REFERENCE_FILE_LOG=$HOME/copy_reference_file.log
java -jar $JENKINS_HOME/jenkins.war --httpPort=8899 --logfile=$JENKINS_HOME/jenkins.log
3、啓動 jenkins

執行 nohup /home/HappyFeet/scripts/start_jenkins.sh &,使用 nohup 的原因是爲了讓它在後臺一直運行

啓動完之後可以打開 http://serverHost:8899 即可進入 jenkins 頁面進入後續操作

七、安裝 htop,監控系統狀態

sudo yum install htop

八、安裝 nodejs 最新版本(參考鏈接:How To Install Latest Nodejs on CentOS/RHEL 7/6Installing nodejs on Red Hat

curl -sL https://rpm.nodesource.com/setup | bash -
yum install -y nodejs

九、登錄 daocloud.io

docker login daocloud.io
Username: HappyFeet(daocloud.io 的 username)
Password:

十、在 jenkins 上添加自動化腳本

jenkins 集成了 git、gradle、nodejs 及 docker。

後端服務原本的部署步驟爲:

(1)更新代碼(需要將 server 上的 ~/.ssh/id_rsa.pub key 加在 github 上):git pull master

(2)將更新之後的代碼編譯,打成 jar 包:gradle clean build

(3)將更新的 jar 掛載在 docker 內部運行:docker run balabala...

前端服務也是類似。

通過 jenkins 工具,我們可以通過一個按鈕就完成上面的所有操作,即自動化。在這個自動化中,jenkins 所扮演的角色就是一個 operator,它可以按順序執行上面(1)、(2)、(3)的操作。而我們要做的就是將(1)、(2)、(3)腳本化。

至於如何編寫腳本和 jenkins 配置則需要參考 jenkins 文檔及 shell 腳本編寫相關的知識了…在此不做詳細講解了。下面給出我自己編寫的大致腳本僅作參考:

#!/bin/zsh

source /home/HappyFeet/.zshrc #使之可以調用 gradle、docker 命令
gradle clean build
cp build/libs/**.jar /opt/jars/**.jar #將jar包複製到掛載目錄
docker stop svc_name
docker rm svc_name
docker run --name svc_name -v /opt/jars/:/app/ ....

搭建自動化部署環境所涉及的知識點還是比較多的,雖然我也想將搭建過程詳盡道來,但其中細節頗多,很難將其全面覆蓋到,所以很多地方我都將參考鏈接附上,有一些則是官方文檔,通過這些鏈接基本可以完成,但不一定很輕鬆。當然,如果在搭建過程中遇到問題,可以在 stackoverflow 上搜尋答案,也歡迎大家提問!畢竟----我是一隻愛瞎折騰的程序猿_

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