天天看點

安裝Jenkins并建構Docker鏡像

Jenkins是一個開源項目,提供了一種易于使用的持續內建系統,使開發者從繁雜的內建中解脫出來,專注于更為重要的業務邏輯實作上。同時Jenkins能實施監控內建中存在的錯誤,提供詳細的日志檔案和提醒功能,還能用圖表的形式形象地展示項目建構的趨勢和穩定性。并且Jenkins提供了大量的插件,能夠完成各種任務。

今天我需要使用Jenkins建構一個Docker鏡像,然後自動push到docker registry中。到了docker registry中,後面測試人員就可以把鏡像釋出到測試環境,測試如果沒有問題就可以釋出到線上環境。

下面先介紹Jenkins建構docker鏡像,在使用Jenkins建構Docker鏡像之前,最好先看一下Docker:使用Dockerfile建構Nginx鏡像 http://www.ywnds.com/?p=7611

安裝Jenkins

添加Jenkins的源(repository)

sudo wget -O /etc/yum.repos.d/jenkins.repo http://jenkins-ci.org/redhat/jenkins.repo

sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key

安裝JDK

yum install java-1.8.0-openjdk -y 或者tar包安裝都一樣

java version "1.8.0_171"

Java(TM) SE Runtime Environment (build 1.8.0_171-b11)

Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.164.3-1.1.noarch.rpm

https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/(選擇版本)

yum install jenkins-2.164.3-1.1.noarch.rpm

#systemctl enable jenkins --now systemclt 220之後可以使用這個指令設定自啟後啟動服務

systemctl enable jenkins

systemctl restart jenkins

#如果jenkins服務起不來的話,systemctl status jenkins 看下原因

: Starting LSB: Jenkins Automation Server...

Aug 30 11:00:22 jenkins runuser[402]: pam_unix(runuser:session): session opened f...0)

Aug 30 11:00:22 jenkins jenkins[397]: Starting Jenkins bash: /usr/bin/java: No su...ry

Aug 30 11:00:22 jenkins runuser[402]: pam_unix(runuser:session): session closed f...ns

Aug 30 11:00:22 jenkins jenkins[397]: [FAILED]

Aug 30 11:00:22 jenkins systemd[1]: jenkins.service: control process exited, code...=1

Aug 30 11:00:22 jenkins systemd[1]: Failed to start LSB: Jenkins Automation Server.

Aug 30 11:00:22 jenkins systemd[1]: Unit jenkins.service entered failed state.

Aug 30 11:00:22 jenkins systemd[1]: jenkins.service failed.

#這裡需要建個軟連接配接

ln -s /usr/local/jdk-12.0.2/bin/java /usr/bin/java

yum install jenkins -y

rpm -qi jenkins | grep Version

Version : 2.204 (版本會不斷更新)

啟動Jenkins

service jenkins start (start,stop,restart)

systemctl start jenkins

報錯解決

https://blog.csdn.net/qq_34208844/article/details/87865672

到此,Jenkins就安裝完成了,然後就可以啟動Jenkins。

Jenkins預設監控端口8080,檢視Jenkins程序。

安裝Jenkins并建構Docker鏡像

修改中文

到系統管理>插件管理中>下載下傳如下插件接口

Localization: Chinese (Simplified)

重新開機Jenkins即可

Jenkins檔案說明

[root@slave1 ~]# rpm -ql jenkins

/etc/init.d/jenkins

/etc/logrotate.d/jenkins

/etc/sysconfig/jenkins

/usr/lib/jenkins

/usr/lib/jenkins/jenkins.war

/usr/sbin/rcjenkins

/var/cache/jenkins

/var/lib/jenkins

/var/log/jenkin

jenkins相關目錄釋義:

(1)/usr/lib/jenkins/:jenkins安裝目錄,war包會放在這裡。

(2)/etc/sysconfig/jenkins:jenkins配置檔案,“端口”,“JENKINS_HOME”等都可以在這裡配置。

(3)/var/lib/jenkins/:預設的JENKINS_HOME。

(4)/var/log/jenkins/jenkins.log:jenkins日志檔案。

/var/lib/jenkins/jobs/${project_name}/workspace/:Jenkins項目的工作空間,存儲從Git或SVN下載下傳的内容,${project_name}就是其項目名稱。

配置Jenkins建構鏡像

如果沒有特别配置端口,使用http://<ip address>:8080/登入Jenkins,并進行相關配置(插件安裝、權限配置、View/Job建立等等)。

第一次登陸Jenkins時需要解鎖,把如下秘鑰填寫進去即可。

cat /var/lib/jenkins/secrets/initialAdminPassword

a737ebbbfece4e6991cf70d45a299ed5

安裝Jenkins并建構Docker鏡像

然後設定一下使用者密碼,就正式進入到了Jenkins配置界面。

安裝Jenkins并建構Docker鏡像

首先,需要安裝一些必要的插件SCM Sync Configuration Plugin ,(gitlab)GitHub plugin ,GIT plugin ,GIT client plugin,在系統管理->插件管理裡面安裝,安裝結束後重新開機jenkins即可。

安裝Jenkins并建構Docker鏡像

然後建立一個項目為nginx。

安裝Jenkins并建構Docker鏡像

然後配置一下源碼管理,Git位址:https://github.com/dongwenpeng/nginx

就下面幾個檔案,主要是dockerfile,然後提供了一些nginx配置檔案以及web檔案。

-rw-r--r-- 1 jenkins jenkins 744 Dec 27 20:22 default.conf

-rw-r--r-- 1 jenkins jenkins 338 Dec 27 20:22 dockerfile

-rw-r--r-- 1 jenkins jenkins 593 Dec 27 20:22 nginx.conf

drwxr-xr-x 3 jenkins jenkins 16 Dec 27 20:22 web

-rw-r--r-- 1 jenkins jenkins 644118 Dec 27 20:22 web.zip

如下配置,也可以使用你本地的Git倉庫:

安裝Jenkins并建構Docker鏡像

主要就是建構腳本了。

安裝Jenkins并建構Docker鏡像

腳本内容

#!/bin/sh

#

DATE=<code>date +%m%d%H%M</code>

DIR="/var/lib/jenkins/jobs/nginx/workspace"

sudo /bin/docker build -t nginx_$DATE $DIR | tee $DIR/Docker_build_result.log

RESULT=$(cat $DIR/Docker_build_result.log | tail -n 1)

if [["$RESULT" != Successfully]];then

exit -1

fi

注意:這裡說明幾點,第一git沒有的就安裝 yum -y install git

/var/lib/jenkins/jobs/nginx/workspace這裡的路徑少了個workspace需要建立

chown -R jenkins:jenkins workspace/

之後要重新開機Jenkins。

配置jenkins使用者

此時還不能立即建構,因為jenkins觸發腳本并不是root使用者,是以需要将jenkins免密碼,并将使用者加入到docker組。(這裡docker 沒有也要安裝 https://blog.51cto.com/10158955/2125450 )

cat /etc/sudoers.d/jenkins

Defaults:jenkins !requiretty

jenkins ALL=(ALL) NOPASSWD: ALL

第一行表示僅jenkins使用者不需要控制終端,不然在Jenkins腳本中無法使用sudo。

usermod -G docker jenkins

(建立docker組 groupadd docker )

開始建構鏡像

在jenkins的build記錄中可以看到輸出,由于jenkins會自動把github上的檔案給下載下傳下來放在workspace目錄中。是以,觸發腳本後,直接開始建構nginx鏡像。

Started by user admin

Building in workspace /var/lib/jenkins/jobs/nginx/workspace

git rev-parse --is-inside-work-tree # timeout=10 Fetching changes from the remote Git repository git config remote.origin.url https://github.com/dongwenpeng/nginx # timeout=10 Fetching upstream changes from https://github.com/dongwenpeng/nginx git --version # timeout=10 git fetch --tags --progress https://github.com/dongwenpeng/nginx +refs/heads/:refs/remotes/origin/ git rev-parse refs/remotes/origin/master^{commit} # timeout=10 git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10 Checking out Revision c0148c6714be8a64710d87e2ebc3395573dfcb0f (refs/remotes/origin/master) git config core.sparsecheckout # timeout=10 git checkout -f c0148c6714be8a64710d87e2ebc3395573dfcb0f git rev-list c0148c6714be8a64710d87e2ebc3395573dfcb0f # timeout=10 [workspace] $ /bin/sh /tmp/hudson3618361245563383297.sh Sending build context to Docker daemon 557.1 kB Sending build context to Docker daemon 1.114 MB Sending build context to Docker daemon 1.671 MB Sending build context to Docker daemon 2.228 MB Sending build context to Docker daemon 2.785 MB Sending build context to Docker daemon 3.273 MB Step 1 : FROM nginx latest: Pulling from library/nginx Digest: sha256:2a07a07e5bbf62e7b583cbb5257357c7e0ba1a8e9650e8fa76d999a60968530f Status: Downloaded newer image for nginx:latest ---&gt; 19146d5729dc Step 2 : MAINTAINER dkey ---&gt; Using cache ---&gt; 715cd864289f Step 3 : ENV RUN_USER nginx ---&gt; 919de987c861 Step 4 : ENV RUN_GROUP nginx ---&gt; 12bb383d0cdc Step 5 : ENV DATA_DIR /data/web ---&gt; 69561736d70e Step 6 : ENV LOG_DIR /data/log/nginx ---&gt; c9be367631c7 Step 7 : RUN mkdir /data/log/nginx -p ---&gt; 137c4decd554 Step 8 : RUN chown nginx.nginx -R /data/log/nginx ---&gt; 4262ffbc2a5c Step 9 : ADD web /data/web ---&gt; ac936a598dc4 Removing intermediate container 1efe9556276a Step 10 : ADD nginx.conf /etc/nginx/nginx.conf ---&gt; 2b6f7ab35d9f Removing intermediate container 12b1066d8808 Step 11 : ADD default.conf /etc/nginx/conf.d/default.conf ---&gt; 619fc14e58bf Removing intermediate container 362067e9bbce Step 12 : EXPOSE 80 ---&gt; Running in ace973e663f0 ---&gt; 7982205f27dd Removing intermediate container ace973e663f0 Step 13 : ENTRYPOINT nginx -g "daemon off;" ---&gt; Running in 892e45827ff4 ---&gt; 63375850b045 Removing intermediate container 892e45827ff4 Successfully built 63375850b045 Finished: SUCCESS

建構完成後,可以去Jenkins主機看看鏡像是否完成。

docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

nginx_12272051 latest 63375850b045 58 minutes ago 182.7 MB

nginx latest 19146d5729dc 6 days ago 181.6 MB

可以看到已經建構完成了,下面直接啟動此鏡像。

docker run --name nginx -p 80:80 -d nginx_12272051

docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

c6ca642a3574 nginx_12272051 "/bin/sh -c 'nginx -g" 18 seconds ago Up 17 seconds 0.0.0.0:80-&gt;80/tcp, 443/tcp nginx

推送到遠端倉庫

現在使用Jenkins建構Docker鏡像已經沒有問題了,下面就可以把Jenkins建構完的鏡像直接推送到遠端的registry中。關于建構私有docker registry可以看Docker:搭建私有倉庫(Registry 2.4)http://www.ywnds.com/?p=7411

當遠端倉庫搞定後,其實Jenkins這邊做的并不是太多,隻需要把建構腳本修改一下,在建構完成後直接推送到遠端倉庫就OK了。

繼續閱讀