Jenkins——使用Docker部署Jenkins详解

。思索 2021-01-21 18:17:03
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安装

整体目录结构如下

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/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 <本地映射目录>)
版权声明
本文为[。思索]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/wangyang0210/p/14299395.html

  1. 【计算机网络 12(1),尚学堂马士兵Java视频教程
  2. 【程序猿历程,史上最全的Java面试题集锦在这里
  3. 【程序猿历程(1),Javaweb视频教程百度云
  4. Notes on MySQL 45 lectures (1-7)
  5. [computer network 12 (1), Shang Xuetang Ma soldier java video tutorial
  6. The most complete collection of Java interview questions in history is here
  7. [process of program ape (1), JavaWeb video tutorial, baidu cloud
  8. Notes on MySQL 45 lectures (1-7)
  9. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  10. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  11. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  12. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  13. 【递归,Java传智播客笔记
  14. [recursion, Java intelligence podcast notes
  15. [adhere to painting for 386 days] the beginning of spring of 24 solar terms
  16. K8S系列第八篇(Service、EndPoints以及高可用kubeadm部署)
  17. K8s Series Part 8 (service, endpoints and high availability kubeadm deployment)
  18. 【重识 HTML (3),350道Java面试真题分享
  19. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  20. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  21. [re recognize HTML (3) and share 350 real Java interview questions
  22. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  23. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  24. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  25. RPC 1: how to develop RPC framework from scratch
  26. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  27. RPC 1: how to develop RPC framework from scratch
  28. 一次性捋清楚吧,对乱糟糟的,Spring事务扩展机制
  29. 一文彻底弄懂如何选择抽象类还是接口,连续四年百度Java岗必问面试题
  30. Redis常用命令
  31. 一双拖鞋引发的血案,狂神说Java系列笔记
  32. 一、mysql基础安装
  33. 一位程序员的独白:尽管我一生坎坷,Java框架面试基础
  34. Clear it all at once. For the messy, spring transaction extension mechanism
  35. A thorough understanding of how to choose abstract classes or interfaces, baidu Java post must ask interview questions for four consecutive years
  36. Redis common commands
  37. A pair of slippers triggered the murder, crazy God said java series notes
  38. 1、 MySQL basic installation
  39. Monologue of a programmer: despite my ups and downs in my life, Java framework is the foundation of interview
  40. 【大厂面试】三面三问Spring循环依赖,请一定要把这篇看完(建议收藏)
  41. 一线互联网企业中,springboot入门项目
  42. 一篇文带你入门SSM框架Spring开发,帮你快速拿Offer
  43. 【面试资料】Java全集、微服务、大数据、数据结构与算法、机器学习知识最全总结,283页pdf
  44. 【leetcode刷题】24.数组中重复的数字——Java版
  45. 【leetcode刷题】23.对称二叉树——Java版
  46. 【leetcode刷题】22.二叉树的中序遍历——Java版
  47. 【leetcode刷题】21.三数之和——Java版
  48. 【leetcode刷题】20.最长回文子串——Java版
  49. 【leetcode刷题】19.回文链表——Java版
  50. 【leetcode刷题】18.反转链表——Java版
  51. 【leetcode刷题】17.相交链表——Java&python版
  52. 【leetcode刷题】16.环形链表——Java版
  53. 【leetcode刷题】15.汉明距离——Java版
  54. 【leetcode刷题】14.找到所有数组中消失的数字——Java版
  55. 【leetcode刷题】13.比特位计数——Java版
  56. oracle控制用户权限命令
  57. 三年Java开发,继阿里,鲁班二期Java架构师
  58. Oracle必须要启动的服务
  59. 万字长文!深入剖析HashMap,Java基础笔试题大全带答案
  60. 一问Kafka就心慌?我却凭着这份,图灵学院vip课程百度云