1. 程式人生 > 程式設計 >DevOps:GitLab+Jenkins+Docker實踐分享

DevOps:GitLab+Jenkins+Docker實踐分享

相信很多小團隊仍然在使用SVN+手動發版的這樣的方法,當程式碼量不斷膨脹、開發人員不斷上升,在管理上會愈發吃力。最近,領導說,小楊啊,我們要提升開發效率。於是,選擇了Gitlab+Jenkins的主流工具,過程中遇到很多坑,希望和大家分享。

持續整合示意圖
持續整合示意圖

GitLab

GitLab簡單的說就是自建版的Github,可以安裝到自己的伺服器上,主要功能程式碼管理、許可權管理、程式碼視覺化、需求管理。

Server: Ubuntu 14.04

GitLab:10.0.1

安裝配置

  1. GitLab安裝依賴包
sudo apt-get install curl openssh-server ca-certificates postfix
複製程式碼
  1. 首先信任 GitLab 的 GPG 公鑰:
curl https://packages.gitlab.com/gpg.key 2> /dev/null | sudo apt-key add - &>/dev/null
複製程式碼
  1. 修改或新建/etc/apt/sources.list.d/gitlab-ce.list加入清華的gitlab源,因為官方源實在是太慢了
deb https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu trusty main
複製程式碼
  1. 安裝 gitlab-ce:
sudo apt-get update
sudo apt-get install gitlab-ce
複製程式碼
  1. 安裝完成後,修改/etc/gitlab/gitlab.rb檔案(有的文章說改別的地方,不推薦,Ubuntu 14.04改這裡就行),將gitlab.example.com換為當前伺服器的ip,例如192.168.1.1。
external_url 'http://gitlab.example.com'
複製程式碼
  1. 接著就重新配置gitlab,然後重啟GitLab服務:
sudo gitlab-ctl reconfigure#重新配置
sudo gitlab-ctl restart#重新啟動gitlab服務
複製程式碼
  • 服務重啟完成後,在瀏覽器中輸入伺服器ip,不用加埠號,即可進入GitLab的介面,GitLab和Github功能大致一致。至於不會git操作的使用者,請移步
    Git簡明教程

報錯處理

  • 在瀏覽器輸入地址後,出現502:重新配置然後重啟,一般來說gitlab啟動需要一段時間,稍等即可。
  • 在瀏覽器輸入地址後,出現nginx、apache2或者別的:關閉相關服務,後重啟gitlab。

Docker

Docker: 17.0

Docker的安裝方法便不再贅述,官方教程很詳細,簡單明瞭。

Docker官方安裝教程:Ubuntu CentOS Docker-Compose

順便再推薦Docker官方教程,以及Docker官方映象倉庫幾乎所有工具的映象在這裡都可以找到。不出幾年,我們將拋開所有繁雜的安裝過程,擁抱docker映象。

重點說一下的幾個配置,在網上有很多教程、回答,在17版本中都已經失效。總體來說,目前版本(17.0.x)的docker的設定都配置化,不用再在docker的執行指令碼中修改。

訪問遠端Docker

被訪問伺服器中修改/etc/default/docker檔案新增:0.0.0.0代表任何ip都可以訪問,當然需要限制訪問ip可以在這裡設定。

DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"
複製程式碼

私有倉庫

私有倉庫是很有用的功能,簡單幾條命令即可建立私有倉庫,同時,將自己的映象上傳到私有倉庫,既保障的映象安全,也為映象備份。

docker pull registry
docker run -d -p 5000:5000 registry
複製程式碼

私有倉庫開啟後,push或者pull的時候會報連結錯誤。此時需要修改/etc/docker/daemon.json檔案即可,如下:

{
  "registry-mirrors": ["https://registry.docker-cn.com"],"insecure-registries":["x.x.x.x:5000"]
}
複製程式碼

在Stackoverflow上很多回答說修改/etc/init.d/docker/etc/sysconfig/docker抑或其他,在當前版本都是行不通。

Docker代理

某些地方的伺服器不能連外網,此時需要代理。建立/etc/systemd/system/docker.service.d/http-proxy.conf檔案,新增以下內容:

[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80/"
複製程式碼

若果需要https代理建立https-proxy.conf檔案並做相應修改即可。接著重新載入Docker配置,重啟服務,代理生效。

systemctl daemon-reload
複製程式碼

Jenkins

Server: CentOS 7.2

Jenkins:2.7.9

安裝

  1. 首先新增yum源,然後使用yum安裝,Jenkins本質上是一個war包,一定要注意在此之前需要安裝Java。
sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/RedHat/jenkins.repo
sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
sudo yum install jenkins
複製程式碼
  1. 接下來配置/etc/sysconfig/jenkins檔案,最重要的兩條,一條是當前機器Java的路徑;以及Jenkins的埠號,預設為8080,如果已被佔用可以更換。
JENKINS_JAVA_CMD="/usr/local/java/jdk1.8/bin/java"
JENKINS_PORT="8080"
複製程式碼

Jenkins服務重啟

sudo service jenkins start/stop/restart
sudo chkconfig jenkins on
複製程式碼
  1. 之後便可以在瀏覽器輸入伺服器ip:8080,看到Jenkins的頁面。按照提示/var/lib/jenkins/secrets/initalAdminPassword檔案中找到管理員密碼,然後一路next即可,進入Jenkins介面。

配置

  1. 系統管理->Global Tool Configuration分別設定JDK、Git、Maven、Docker,其中name都是隨便填的,路徑填入相應軟體的路徑,值得注意的是有的只需要精確到所在檔案,有的則需要精確到執行檔案。當然,如果填的不對,會有黃字或紅字提示。

  2. 系統管理->系統設定 中需要配置Maven專案配置和Docker Builder(需要裝外掛)。

Maven中Local Maven Repository選擇default即可,但是在Maven軟體中,需要修改maven(你的maven路徑)/conf/setting.xml中的修改local repository標籤,例如以下地址。因為許可權問題,如果把本地倉庫放入root目錄下,會報錯。

<localRepository>/var/.m2/repository</localRepository>
複製程式碼

Docker Builder設定。首先安裝Docker Builder外掛,設定Docker URL為以下二選一。本地docker可以選擇以下兩種的任意一種。

unix:///var/run/docker.sock#連線本地docker
tcp://xxx.x.xx.xx:2375#連線遠端docker
複製程式碼

點Test Connection驗證連結是否正確。連線遠端出錯請參看本文“訪問遠端Docker”這一小節,本地出現錯誤請修改Jenkins所在伺服器中/var/run/docker.sock許可權,最簡單粗暴的是chmod 777 /var/run/docker.sock

控制Docker

控制Docker流程可以用指令碼,也可以用Execute Docker Command外掛,在設定好Docker Builder後,很容易設定Execute Docker Command,下面用指令碼演示。

docker stop $(docker ps -aq --filter='name=yang' | paste -sd "|" -) #停止名為yang的容器
docker rm $(docker ps -aq --filter='name=yang' | paste -sd "|" -) #刪除名為yang的容器
docker build -t oppdocker:$BUILD_NUMBER .  #建立相應映象,注意後面有個.
docker create --name yang-p 4000:8080 yangdocker:$BUILD_NUMBER #建立容器
docker tag yangdocker:$BUILD_NUMBER 10.0.210.148:5000/yangdocker:$BUILD_NUMBER #標記容器
docker push 10.0.210.148:5000/yangdocker:$BUILD_NUMBER #標記容器到遠端倉庫
docker start yang #啟動容器
複製程式碼

Pepeline

Pepeline事實上Groovy指令碼,先放放,稍後寫