• 系统版本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

Jenkins——使用Docker部署Jenkins详解

  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——使用Docker部署Jenkins详解

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——使用Docker部署Jenkins详解

Jenkins初始化

Jenkins完全启动时会打印一条Jenkins is fully up and running日志,看到此日志就可以开始配置Jenkins了。
Jenkins——使用Docker部署Jenkins详解

登录Jenkins

输入刚才在日志中得到的密码来激活Jenkins

Jenkins——使用Docker部署Jenkins详解

安装社区推荐插件

等待插件自动安装完成,若因网络问题安装失败则重试即可

Jenkins——使用Docker部署Jenkins详解
Jenkins——使用Docker部署Jenkins详解
Jenkins——使用Docker部署Jenkins详解

设置admin账户和密码

邮箱可以随便填写
Jenkins——使用Docker部署Jenkins详解

设置Jenkins URL

URL会被用来做Webhook等用途等地址
Jenkins——使用Docker部署Jenkins详解

部署完成

Jenkins——使用Docker部署Jenkins详解
Jenkins——使用Docker部署Jenkins详解

安装Jenkins插件

Jenkins自动化部署依赖一系列插件的协作,所以我们要提前安装好。

配置升级站点

Manage Jenkins->Manage Plugins->高级

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

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

Jenkins——使用Docker部署Jenkins详解
Jenkins——使用Docker部署Jenkins详解

配置插件

可选插件下搜索以下插件并安装

Blue Ocean (可选,如果想用Blue Ocean视图的话)
SSH Pipeline Steps
Pipeline Utility Steps
NodeJS
ansiColor

Jenkins——使用Docker部署Jenkins详解

重启Jenkins

插件安装完成的时候重启Jenkins

Jenkins——使用Docker部署Jenkins详解

Jenkins——使用Docker部署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安装
Jenkins——使用Docker部署Jenkins详解

  • 名称为M3(名称很重要,我们的流水线配置中需要使用这个名字)
  • 勾选掉自动安装复选框
  • 并设置MAVEN_HOME地址为/var/jenkins_home/tools/apache-maven-3.6.3
  • 点击保存
    Jenkins——使用Docker部署Jenkins详解

配置NodeJS

上述安装Jenkins插件过程中已经安装了NodeJS插件,因为NodeJS有很多版本,所以我们需要手动配置NodeJS安装,这样才可以在流水线中使用它。
在Jenkins Server Web界面上系统管理->全局工具配置->NodeJS->新增NodeJS安装

Jenkins——使用Docker部署Jenkins详解

  • 别名设置为NODEJS10(名称很重要,我们的流水线配置中需要使用这个名字)
  • 选择版本NodeJS10.23.0(可以根据需要选择)
  • 点击保存

Jenkins——使用Docker部署Jenkins详解

配置Jenkins

配置Jenkins凭据

Jenkins提供凭据管理的功能来帮助我们存放涉密账号密码、私钥等信息,在配置Pipeline前我们需要创建好相关凭据。

  • 生成ssh密钥对
# ssh进入Jenkins服务器

# 进入Jenkins容器
docker exec -it jenkins-blueocean bash
# 进入主目录
cd ~
# 生成RSA密钥对
ssh-keygen -m PEM -t rsa

Jenkins——使用Docker部署Jenkins详解

在Jenkins界面上系统管理->管理凭据`中创建以下全局ssh密钥对凭据,填写好ID、描述、用户名和私钥信息

Jenkins——使用Docker部署Jenkins详解

Jenkins——使用Docker部署Jenkins详解

  • jenkins-ssh-deploy 用于ssh部署,用户名填写目标运维账号,如root

Jenkins——使用Docker部署Jenkins详解

  • jenkins-ssh-gitlab 用于从gitlab拉代码,用户名填写jenkins

Jenkins——使用Docker部署Jenkins详解

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

Jenkins——使用Docker部署Jenkins详解

为了Jenkins能正常执行部署任务,各个应用服务器运维账号要信任上述生成的密钥对。

可参考该文章[https://www.cnblogs.com/wangyang0210/p/14361954.html]

创建共享类库

Jenkins Pipeline支持共享类库来减少冗余代码,我们通过这种方法来复用代码并且管理部署相关配置。

系统管理->系统配置->Global Pipeline Libraries中点击新增来创建共享类库,其基本信息如下:

Jenkins——使用Docker部署Jenkins详解

Jenkins——使用Docker部署Jenkins详解

Jenkins——使用Docker部署Jenkins详解

安全配置

系统管理->全局安全配置->项目矩阵授权策略

根据自己需求进行授权就好了

Jenkins——使用Docker部署Jenkins详解

Jenkins——使用Docker部署Jenkins详解

Jenkins——使用Docker部署Jenkins详解

流水线配置

创建流水线

新建任务->输入名称->流水线->确定

Jenkins——使用Docker部署Jenkins详解

Jenkins——使用Docker部署Jenkins详解

配置流水线

  1. general->丢弃旧的构建

Jenkins——使用Docker部署Jenkins详解

  1. 参数化构建过程->字符参数

Jenkins——使用Docker部署Jenkins详解

  1. 流水线
@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)
    }
}

Jenkins——使用Docker部署Jenkins详解

流水线需要依赖响应的共享库的,这个是需要开发的,这里就不详说了

报错

构建报错

这里只是做一个记录,上方的步骤均已是修改为正确的步骤。

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 <本地映射目录>)

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-08-05
  • 2022-12-23
  • 2021-08-31
  • 2022-12-23
  • 2021-10-22
  • 2022-01-06
猜你喜欢
  • 2021-11-13
  • 2021-06-19
  • 2021-10-29
  • 2021-12-17
  • 2021-08-08
  • 2021-08-08
相关资源
相似解决方案