前言
- 系统版本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 <本地映射目录>)
学无止境,谦卑而行.