1. 程式人生 > >使用Docker安裝Jenkins並新增外掛

使用Docker安裝Jenkins並新增外掛

Jenkins使用記錄

文章目錄


利用docker安裝Jenkins

拉取jenkins映象
docker pull jenkins
掛載目錄到宿主機,例如使用/var/jenkins_home,需要給目錄設定訪問許可權

chown -R 1000 /var/jenkins_home
啟動。 使用 root 賬號進行登入,暴露埠 8080,tcp 埠50000

docker run -u root -itd --name jenkins -p 8080:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home jenkins

根據指導完成註冊
安裝外掛:
Publish Over SSH
maven plugin
SSH plugin
Maven Integration plugin
Docker plugin

注意:jenkins是基於jdk環境的,所以在系統管理中,要配置全域性工具配置,進行JDK安裝和Maven的安裝,可直接自動安裝。

使用過程:

建立專案

這裡以Maven專案為例,先新建任務,之前配置了Maven Integration plugin,所以多了一個maven專案,填寫專案名,選擇專案型別,即可建立。
image
建立完,進入專案,點選設定,進行配置:
image

原始碼管理

配置自動構建,一般可配置github或gitlab的webhook為觸發條件。也就是當我們push專案時,Jenkins自動幫我們自動測試與構建。當然也可以自動部署,視情況而定。
首先要配置原始碼管理,這裡以git為例:
選擇git,配置Repository URL,就是我們的git專案地址。
然後一定要配置證書,證書可配置ssh連線的,或賬號密碼的,你個人選擇。
我是使用賬號密碼的,注意要填寫你登入git的賬號密碼,不對會連線不上。
image

構建觸發器

步驟如下:
勾選 Build when a change is pushed to GitLab. GitLab webhook URL: http://jenkins.ss.com/project/
如果需要加密,可要點選高階,填寫Secret token,然後這個token要與webhook上的一致。
image

其它功能

Pre Steps是執行構建前做的操作,有眾多選項,因為我是構建中linux環境的,一般都選Shell。
應用場景:如springboot的替換生產環境。
Builds是執行構建操作,一般無需配置,Maven專案預設構建pom.xml,其它視情況而定。
Post Steps是構建完後執行的操作。也有眾多選項,我也是用的shell,一般此選項可用來做部署。

額外配置

假如你安裝jenkins時,是使用docker映象安裝的,那麼如果你要在jenkins裡面使用docker的話,你還需做以下步驟:

  1. 在構建Jenkins映象時,將jenkins使用者加入docker組,
FROM jenkins/jenkins:latest
LABEL maintainer="[email protected]"
USER root
ARG dockerGid=999
RUN echo "docker:x:${dockerGid}:jenkins" >> /etc/group
USER jenkins
  1. docker啟動jenkins容器時,將docker的檔案掛載進去,分別是:
 -v /var/run/docker.sock:/var/run/docker.sock
 -v $(which docker):/usr/bin/docker
 命令:
 docker run -d --name myjenkins -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker -p 8080:8080 myname/jenkins:1.609.1 

注意: 可能會出現一種情況,以上面的方式啟動容器後,還是無法用docker命令,報 找不到某些library,如:

docker: error while loading shared libraries: libltdl.so.7: cannot open shared object file: No such file or directory

原因是jenkins容器內部沒有這個包,解決的辦法有兩個:

  • 將容器宿主機的包對映到容器內:
    #省略了其他docker執行引數,只列出了缺少的包對映volume
$ docker run --name jenkins -v /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7  -d my-jenkins

如果沒有libltdl.so.7檔案,可進行下載,apt-get install -y libltdl7

  • 對jenkins映象進行封裝,官方的jenkins映象是基於debian jessie的,dockerfile最好把源切換成國內的。Dockerfile內容如下:
FROM jenkins

USER root
#清除了基礎映象設定的源,切換成阿里雲的jessie源
RUN echo '' > /etc/apt/sources.list.d/jessie-backports.list \
  && echo "deb http://mirrors.aliyun.com/debian jessie main contrib non-free" > /etc/apt/sources.list \
  && echo "deb http://mirrors.aliyun.com/debian jessie-updates main contrib non-free" >> /etc/apt/sources.list \
  && echo "deb http://mirrors.aliyun.com/debian-security jessie/updates main contrib non-free" >> /etc/apt/sources.list
#更新源並安裝缺少的包
RUN apt-get update && apt-get install -y libltdl7

ARG dockerGid=999

RUN echo "docker:x:${dockerGid}:jenkins" >> /etc/group \
USER jenkins

role許可權管理,對不同的角色可授予不同許可權。

最終掛載:

  volumes:
    - '/var/jenkins_home:/var/jenkins_home'
    - '/var/run/docker.sock:/var/run/docker.sock'
    - '/usr/bin/docker:/usr/bin/docker'
    - '/usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7'    
    - '/etc/localtime:/etc/localtime'
    - '/etc/timezone:/etc/timezone'

參考連結:
https://segmentfault.com/a/1190000010233185
https://my.oschina.net/donhui/blog/478514
https://www.cnblogs.com/leolztang/p/6934694.html
角色許可權