Jenkins——使用Docker部署Jenkins詳解

前言

  • 系統版本Centos7.8 X64
  • Docker版本18.09+
  • 安裝docker-compose
  • RSA格式的ssh密鑰對一個,用來拉取gitlab代碼和ssh到各個應用服務器上部署,可使用ssh-keygen -t rsa來生成

步驟

Docker安裝

  1. 安裝Docker服務
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
  1. 啓動Docker服務
systemctl start docker
systemctl enable docker
  1. 驗證docker是否安裝成功
docker run hello-world

  1. 安裝Docker-composer服務
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  1. 授予執行權限
chmod +x /usr/local/bin/docker-compose
  1. 驗證docker-composer是否安裝成功
docker-compose --version

Jenkins安裝

總體目錄結構以下html

app
└── data
    ├── deploy
    │   └── jenkins
    │       ├── config
    │       ├── docker-composer.yml
    │       └── Dockerfile
    └── jenkins
        ├── certs
        └── data

建立部署目錄和數據目錄

# 存放docker-compose相關配置文件
mkdir -p /app/data/deploy/jenkins 
# 存放Jenkins證書相關文件
mkdir -p /app/data/jenkins/certs 
# 存放Jenkins數據文件
mkdir -p /app/data/jenkins/data 
# 修改權限
cd /app/data
chmod 775 -R jenkins/
chown -R 1000:1000 jenkins/

建立相應文件配置

進入目錄

cd /app/data/deploy/jenkins/

docker-composer.yml

version: "2"
services:
  jenkins-blueocean:
    build:
      context: .
    container_name: jenkins-blueocean
    network_mode: bridge
    ports:
      - 8088:8080
      # - 50000:50000
    environment:
    # - DOCKER_HOST=tcp://docker:2376
    # - DOCKER_CERT_PATH=/certs/client
    # - DOCKER_TLS_VERIFY=1
    - TZ=Asia/Shanghai
    - JENKINS_UC="https://mirrors.tuna.tsinghua.edu.cn/jenkins/"
    - JENKINS_UC_DOWNLOAD="https://mirrors.tuna.tsinghua.edu.cn/jenkins/"
    - JENKINS_OPTS="-Dhudson.model.UpdateCenter.updateCenterUrl=https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json"
    volumes:
    - /app/data/jenkins/certs:/certs/client:ro
    - /app/data/jenkins/data:/var/jenkins_home
    depends_on:
    - jenkins-docker
    links:
    - jenkins-docker:docker
  jenkins-docker:
    image: docker:19.03.14-dind
    container_name: jenkins-docker
    privileged: true
    network_mode: bridge
    command: --config-file /etc/docker/daemon.json
    ports:
    - 2376:2376
    environment:
    - DOCKER_TLS_CERTDIR=/certs
    volumes:
    - ./config/daemon.json:/etc/docker/daemon.json:ro
    - /app/data/jenkins/certs:/certs/client
    - /app/data/jenkins/data:/var/jenkins_home

Dockerfile

FROM jenkins/jenkins:2.263.1-lts-slim
USER root
COPY config/sources.list /etc/apt/sources.list
RUN apt-get update && apt-get install -y apt-transport-https \
       ca-certificates curl gnupg2 \
       software-properties-common \
       vim \
       rsync \
       tree \
       default-mysql-client
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
RUN apt-key fingerprint 0EBFCD88
RUN add-apt-repository \
       "deb [arch=amd64] https://download.docker.com/linux/debian \
       $(lsb_release -cs) stable"
RUN apt-get update && apt-get install -y docker-ce-cli
USER jenkins
# RUN jenkins-plugin-cli --plugins blueocean:1.24.3

config配置

daemon.json
{
  "registry-mirrors": [
    # 阿里雲鏡像加速地址
    "https://xxxx.mirror.aliyuncs.com"
  ],
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  },
  "live-restore": true
}
sources.list
deb http://mirrors.aliyun.com/debian/ buster main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ buster main non-free contrib
deb http://mirrors.aliyun.com/debian-security buster/updates main
deb-src http://mirrors.aliyun.com/debian-security buster/updates main
deb http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib
deb http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib

構建啓動Jenkins鏡像

#構建鏡像
docker-compose -f docker-composer.yml build

#啓動服務
docker-compose -f docker-composer.yml up -d

#查看日誌獲取首次登陸密碼
docker logs -f jenkins-blueocean

Jenkins初始化

Jenkins徹底啓動時會打印一條Jenkins is fully up and running日誌,看到此日誌就能夠開始配置Jenkins了。
node

登陸Jenkins

輸入剛纔在日誌中獲得的密碼來激活Jenkinsmysql

安裝社區推薦插件

等待插件自動安裝完成,若因網絡問題安裝失敗則重試便可linux



設置admin帳戶和密碼

郵箱能夠隨便填寫
git

設置Jenkins URL

URL會被用來作Webhook等用途等地址
github

部署完成


安裝Jenkins插件

Jenkins自動化部署依賴一系列插件的協做,因此咱們要提早安裝好。sql

配置升級站點

Manage Jenkins->Manage Plugins->高級docker

#開源鏡像
https://mirrors.huaweicloud.com/jenkins/updates/update-center.json

#開源地址
https://jenkins-zh.cn/tutorial/management/plugin/update-center/


配置插件

可選插件下搜索如下插件並安裝apache

Blue Ocean (可選,若是想用Blue Ocean視圖的話)
SSH Pipeline Steps
Pipeline Utility Steps
NodeJS
ansiColor

重啓Jenkins

插件安裝完成的時候重啓Jenkinsjson

配置maven工具

安裝maven
# ssh進入Jenkins服務器
# 進入Jenkins容器
docker exec -it jenkins-blueocean bash
# 進入用戶主目錄,用戶主目錄中的內容被掛載到數據盤上,能夠把安裝程序放心放入其中
cd ~
mkdir -p tools && cd tools
# 下載安裝包
curl https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.zip -o apache-maven-3.6.3-bin.zip
# 解壓
unzip apache-maven-3.6.3-bin.zip
# 刪除安裝包
rm apache-maven-3.6.3-bin.zip

# 配置maven settings.xml
cd ~
mkdir -p .m2
# 將項目中maven配置文件settings.xml文件內容寫入.m2/settings.xml文件中
配置maven

在Jenkins Server Web界面上系統管理->全局工具配置->Maven->新增maven安裝

  • 名稱爲M3(名稱很重要,咱們的流水線配置中須要使用這個名字)
  • 勾選掉自動安裝複選框
  • 並設置MAVEN_HOME地址爲/var/jenkins_home/tools/apache-maven-3.6.3
  • 點擊保存

配置NodeJS

上述安裝Jenkins插件過程當中已經安裝了NodeJS插件,由於NodeJS有不少版本,因此咱們須要手動配置NodeJS安裝,這樣才能夠在流水線中使用它。
在Jenkins Server Web界面上系統管理->全局工具配置->NodeJS->新增NodeJS安裝

  • 別名設置爲NODEJS10(名稱很重要,咱們的流水線配置中須要使用這個名字)
  • 選擇版本NodeJS10.23.0(能夠根據須要選擇)
  • 點擊保存

配置Jenkins

配置Jenkins憑據

Jenkins提供憑據管理的功能來幫助咱們存放涉密帳號密碼、私鑰等信息,在配置Pipeline前咱們須要建立好相關憑據。

  • 生成ssh密鑰對
# ssh進入Jenkins服務器

# 進入Jenkins容器
docker exec -it jenkins-blueocean bash
# 進入主目錄
cd ~
# 生成RSA密鑰對
ssh-keygen -m PEM -t rsa

在Jenkins界面上系統管理->管理憑據`中建立如下全局ssh密鑰對憑據,填寫好ID、描述、用戶名和私鑰信息

  • jenkins-ssh-deploy 用於ssh部署,用戶名填寫目標運維帳號,如root

  • jenkins-ssh-gitlab 用於從gitlab拉代碼,用戶名填寫jenkins

  • gitlab上jenkins用戶下添加此ssh key

爲了Jenkins能正常執行部署任務,各個應用服務器運維帳號要信任上述生成的密鑰對。

可參考該文章[https://www.cnblogs.com/wangyang0210/archive/2004/01/13/9722922.html]

建立共享類庫

Jenkins Pipeline支持共享類庫來減小冗餘代碼,咱們經過這種方法來複用代碼而且管理部署相關配置。

系統管理->系統配置->Global Pipeline Libraries中點擊新增來建立共享類庫,其基本信息以下:

安全配置

系統管理->全局安全配置->項目矩陣受權策略

根據本身需求進行受權就行了

報錯

構建報錯

這裏只是作一個記錄,上方的步驟均已經是修改成正確的步驟。

ERROR: 
        Can't find a suitable configuration file in this directory or any
        parent. Are you in the right directory?

        Supported filenames: docker-compose.yml, docker-compose.yaml

# 解決錯誤
1. docker服務沒有啓動
2. 使用-f指定配置文件

啓動容器報錯

[root@localhost jenkins]# docker logs -f jenkins-blueocean
touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?

# 解決錯誤
1. 目錄權限錯誤(chown -R 1000:1000 <本地映射目錄>)
相關文章
相關標籤/搜索