使用 Jenkins 自動部署 Docker 服務(1、Jenkins 搭建篇)

直接使用 Jenkins 官方的鏡像通常會有兩個問題致使不能正常自動部署基於 Docker 的服務。java

存在的問題

  • 官方的鏡像默認不是使用 root 帳號,雖然 Jenkins 能夠正常啓動,可是由於沒有權限致使不能向宿主機寫文件
  • Jenkins 基於 Docker 搭建,雖然 Jenkins 一樣能夠正常啓動,但不能在容器內部隨意使用 Docker

準備工做

安裝 docker、修改 docker 鏡像倉庫、安裝 pip、安裝 docker-compose
# 若是以爲麻煩能夠用這個部署輔助工具自動完成
git clone https://github.com/kwkwc/dockerSH.git

# 進入工具目錄並自動部署
cd dockerSH && ./deploy.sh

問題一 解決

從新建立鏡像修改成 root 用戶,安裝 docker 依賴庫(問題二解決)

Dockerfile

FROM jenkins/jenkins:2.137
MAINTAINER kwkw "kwkw@example.com"
ENV REFRESHED_AT 2018-08-13

USER root

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

# 安裝 docker 依賴庫
RUN apt update && apt install -y libltdl7

建立新鏡像

docker build -t kwkw/jenkins:2.137 .

問題二 解決

將宿主機的 Docker 程序掛載到 Jenkins 容器內部(宿主機環境爲 Ubuntu 16.04,其餘環境未測試)

docker-compose.yml

version: '2'
services:
  jenkins:
    restart: always
    image: kwkw/jenkins:2.137
    container_name: jenkins
    expose:
      - "8080"
      - "50000"
    ports:
      - "8080:8080"
      - "50000:50000"
    environment:
      JAVA_OPTS: "-Djava.awt.headless=true -Duser.timezone=Asia/Shanghai"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      # 將宿主機的 Docker 程序掛載到 Jenkins 容器內部
      - /usr/bin/docker:/usr/bin/docker:ro
      - ../data/jenkins:/var/jenkins_home

啓動 Jenkins

docker-compose up -d

瀏覽器打開

http://127.0.0.1:8080

圖片描述

初次使用須要填寫密鑰

請根據 docker-compose.yml 裏面填寫的掛載路徑查找

圖片描述

安裝

通常咱們選擇安裝推薦的插件,可是由於默認插件源在國外,速度很是慢並且安裝失敗率高,因此請自行查找特殊辦法

圖片描述

建立管理員用戶

圖片描述

搭建完成

圖片描述

若是已經搭建好能夠使用 Docker 的 Jenkins,請移步到這篇文章git

使用 Jenkins 自動部署 Docker 服務(2、構建部署篇)

相關文章
相關標籤/搜索