前言
- 系統版本Centos7.8 X64
- Docker版本18.09+
- 安裝docker-compose
- RSA格式的ssh密鑰對一個,用來拉取gitlab代碼和ssh到各個應用服務器上部署,可以使用ssh-keygen -t rsa來生成
步驟
Docker安裝
- 安裝Docker服務
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
- 啟動Docker服務
systemctl start docker
systemctl enable docker
- 驗證docker是否安裝成功
docker run hello-world
- 安裝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
- 授予執行權限
chmod +x /usr/local/bin/docker-compose
- 驗證docker-composer是否安裝成功
docker-compose --version
Jenkins安裝
整體目錄結構如下
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了。
登錄Jenkins
輸入剛才在日志中得到的密碼來激活Jenkins
安裝社區推薦插件
等待插件自動安裝完成,若因網絡問題安裝失敗則重試即可
設置admin賬戶和密碼
郵箱可以隨便填寫
設置Jenkins URL
URL會被用來做Webhook等用途等地址
部署完成
安裝Jenkins插件
Jenkins自動化部署依賴一系列插件的協作,所以我們要提前安裝好。
配置升級站點
Manage Jenkins
->Manage Plugins
->高級
#開源鏡像
https://mirrors.huaweicloud.com/jenkins/updates/update-center.json
#開源地址
https://jenkins-zh.cn/tutorial/management/plugin/update-center/
配置插件
可選插件
下搜索以下插件並安裝
Blue Ocean (可選,如果想用Blue Ocean視圖的話)
SSH Pipeline Steps
Pipeline Utility Steps
NodeJS
ansiColor
重啟Jenkins
插件安裝完成的時候重啟Jenkins
配置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/p/14361954.html]
創建共享類庫
Jenkins Pipeline支持共享類庫來減少冗余代碼,我們通過這種方法來復用代碼並且管理部署相關配置。
系統管理
->系統配置
->Global Pipeline Libraries
中點擊新增來創建共享類庫,其基本信息如下:
安全配置
系統管理
->全局安全配置
->項目矩陣授權策略
根據自己需求進行授權就好了
流水線配置
創建流水線
新建任務
->輸入名稱->流水線->確定
配置流水線
general
->丟棄舊的構建
參數化構建過程
->字符參數
- 流水線
@Library('pipeline-deploy-library') _
properties([parameters([string(defaultValue: 'pa-dev', description: '部署代碼分支', name: 'git_branch', trim: true)])])
node {
ansiColor('xterm') {
deployProject('pa_dev.yml', 'admin-web', params)
}
}
流水線需要依賴響應的共享庫的,這個是需要開發的,這里就不詳說了
報錯
構建報錯
這里只是做一個記錄,上方的步驟均已是修改為正確的步驟。
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 <本地映射目錄>)