Jenkins+Docker持续集成(CI/CD)实战
看完本篇文章你将会学到如下内容:
- CI/CD的基本概念
- Jenkins环境搭建
- Jenkins的基本使用
- Jenkins自动部署实战案例
开始
什么是CI?
CI又叫:持续构建 。负责拉取代码库中的代码后,执行用户预置定义好的操作脚本,通过一系列编译操作构建出一个 制品 ,并将制品推送至制品库。
常用工具有 Gitlab CI,Github CI,Jenkins 等。本环节不参与部署,只负责构建代码,然后保存构建物。构建物被称为制品,保存制品的地方被称为 制品库。
什么是CD?
CD 则有2层含义:持续部署(Continuous Deployment) 和 持续交付(Continuous Delivery) 。持续交付 的概念是:将制品库的制品拿出后,部署在测试环境 / 交付给客户提前测试。持续部署 则是将制品部署在生产环境。
环境准备:
docker
、git
、java
:jenkins基于java环境、jenkins
、一台纯净服务器
一、环境搭建
1、安装docker
yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce -y
systemctl start docker
systemctl enable docker
最好配置下docker镜像源为阿里云,否则之后docker下载镜像等操作可能会卡顿
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://fwvjnv59.mirror.aliyuncs.com"]
}
EOF
修改后需要重载所有修改过的配置文件
sudo systemctl daemon-reload
sudo systemctl restart docker
2、git安装并生成ssh公私钥
yum install git -y
ssh-keygen -t rsa -C "你的邮箱"
公私钥默认存放在/.ssh/
下
cat ~/.ssh/id_rsa.pub
3、java安装
yum install -y java
4、安装jenkins
先配置jenkins
的yum源,再进行下载
[root@jenkins ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
[root@jenkins ~]# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.keyyum install jenkins -y
如果很慢,直接ctrl+c中止原命令,执行如下命令通过清华大学地址下载
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war/latest/jenkins.war
以上,便完成了CI的最简洁版环境搭建。
二、Jenkins初识
1、启动jenkins服务
jenkins可以理解为就是一个java项目,目标为提供一个面向软件持续集成的软件平台,见下图更为直观
既然是一个项目,自然我们需要启动它从而启动一个服务,运行如下命令启动jenkins
systemctl start jenkins
如果想开机自启动,建议执行下面这个命令
systemctl enable jenkins
2、访问jenkins服务
那如何验证自己是否成功呢?自然是访问这个服务,jenkins默认服务提供的端口为8080
,在浏览器输入ip:8080
(如果是阿里云服务器,记得去配置安全组开放这个端口),进入Jenkins登录页面,如果出现如下界面,说明成功
3、初始化jenkins
接下来,我们来做一些第一次启动jenkins的初始化工作,如果是已经用过的同学,可以直接跳过这一章;
首先,需要一个密码,jenkins会在启动时将密码写入指定目录下,去cat一下复制粘贴就好
4、新手入门:安装插件
直接安装推荐的插件就好,但是点击前需要先去更改下jenkins插件的镜像,否则会卡顿
sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' /var/lib/jenkins/updates/default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' /var/lib/jenkins/updates/default.json
5、新手入门:配置用户
配置地址,这个一般直接下一步就好
如果出现下面这种界面,说明你初始化工作完成,开始enjoy your jenkins吧!
三、应用jenkins
既然是【面向软件持续集成的软件平台】,自然需要做到如下两点
1、如git、node、nginx等多应用的集成
2、将多个应用的工作集成在一个任务中,jenkins管控内部细节
这就意味着jenkins是以任务为单元的
1、应用案例:设定通过docker下载node的任务
让我们以查看docker版本和通过docker下拉node镜像为例,新建一个任务,其实就是执行如下命令,只不是我们希望通过jenkins去管控,因为这样就代表以后一些复杂的脚本也可以通过任务的形式去自动化执行了
docker -v
docker pull node:latest
首先新建一个任务
添加要执行的脚本
构建任务
这时我们就完成任务的新建了,接下来我们开始构建这个任务吧!
先返回项目详情,然后点击立即构建,最后进入构建任务详情去看下日志,如果最后输出为STATUS:SUCCESS
,说明成功
补充:如果出现下面这个失败报错,说明是【jenkins】这个用户没有权限去访问docker这个服务,所以我们需要将用户添加进这个服务对应的组中
执行如下命令
gpasswd -a jenkins docker
然后更新即可
newgrp docker
2、应用案例:编译react项目
接下来,我们来实操一下,目标很简单:让jenkins帮我们做到如下几步
1、执行构建命令处理一个存储在git或码云上的react项目,会生成一个
build
目录
2、启动一个nginx服务,再把这个build
下的内容移动到nginx的静态文件目录下
这样服务器上就有了对应的服务,我们可以直接访问nginx服务端口从而访问项目,就可以做到对一个项目自动构建、自动部署提供服务,等后期接入了git或码云上传的钩子后,我们就可以实现自动化集成或自动化部署啦,这其实也就是我们说的CICD
。
搭建node环境
要想编译react项目,起码得在jenkins服务中存在node服务,而这个服务是通过插件的形式提供的,大致思路为:
1、先进行node插件的下载
2、安装完插件后,全局配置中心就会出现对应的服务,我们选择指定版本后启动
这样就实现了jenkins中提供对应node服务的需求。知道了思路,那我们就开始实现吧!
首先,我们需要先进行node插件的下载
等待安装重启完成
然后,我们需要在jenkins全局配置中添加node
先找到系统全局配置
安装指定版本,选择从镜像中安装
此时我们就有了node环境
测试node环境
接下来,我们在执行任务时应用我们创建的node环境,先创建一个任务,流程同之前,唯一不同的是在最后一步需要选择node环境,选择我们自己的版本即可
我们在任务中执行如下脚本
node -v
执行任务
看到状态为SUCCESS
并且输出了node的版本,说明搭建node环境成功啦
创建react项目
接着,我们在本地创建一个react项目(假定名字为ci-pro)并上传到码云,这个我们直接在本机上初始化下,然后推送到码云上就好;
使用脚手架
npm版本6+可直接执行
npx create-react-app ci-pro
或者版本低,就得本地安装执行了
create-react-app ci-pro
如果之前没有安装过这个脚手架,需要先执行下面这个命令进行安装
npm install -g create-react-app
等待安装完成了,我们就会有如下目录结构
.
├── README.md
├── package.json
├── public
│ ├── favicon.ico
│ ├── index.html
│ ├── logo192.png
│ ├── logo512.png
│ ├── manifest.json
│ └── robots.txt
├── src
│ ├── App.css
│ ├── App.js
│ ├── App.test.js
│ ├── index.css
│ ├── index.js
│ ├── logo.svg
│ ├── reportWebVitals.js
│ └── setupTests.js
└── yarn.lock
接入nginx
根据之前的思路,我们需要在项目编译后将产物放在nginx的静态资源目录下,然后通过nginx提供服务,那自然我们需要接入nginx服务,先实现nginx的配置文件
创建对应文件
mkdir conf && vi conf/default.conf
指定静态资源目录
default.conf
文件内容
server {listen 80;server_name _;root /etc/nginx/html;
}
此处我们通过docker提供nginx服务,涉及到移动目录、配置自定义配置文件等动作,我们需要自定义镜像,这就需要我们去实现自己的Dockerfile
创建对应文件
vi Dockerfile
做到如下两点:
1、将jenkins执行打包命令后产生的build目录移到nginx的静态资源目录下
2、指定自定义的配置文件
FROM nginx:1.15
COPY build /etc/nginx/html
COPY conf /etc/nginx
至此,我们就完成了本地项目的搭建,再关联下远端仓库,推送下就可以啦,看下现在的目录树
.
├── Dockerfile
├── README.md
├── conf
│ └── default.conf
├── package.json
├── public
│ ├── favicon.ico
│ ├── index.html
│ ├── logo192.png
│ ├── logo512.png
│ ├── manifest.json
│ └── robots.txt
├── src
│ ├── App.css
│ ├── App.js
│ ├── App.test.js
│ ├── index.css
│ ├── index.js
│ ├── logo.svg
│ ├── reportWebVitals.js
│ └── setupTests.js
└── yarn.lock
配置jenkins
对仓库的权限
假定我们拿到了仓库的ssh地址,那就进入我们jenkins任务的配置页,添加。
这时它会提示没有权限
原因很简单,本机的公私钥对,将公钥配在码云上,自然本机有操作远程仓库的权限,但jenkins服务器上是没有私钥的,所有我们需要在jenkins中配置私钥从而获取权限,在哪配置呢?
配置 => 源码管理 => Git => Repositories -> Credentials => 添加 => SSH Username with private key
关于获取私钥的方式,可以查看git安装模块内容
到此,我们就完成了jenkins关于git的配置
配置脚本
回到jenkins,配置在构建任务时要执行的脚本,要做到如下两点
1、安装依赖,进行项目构建
2、执行Dockerfile
文件生成镜像
3、根据新镜像启动服务(为避免端口冲突,先关闭掉镜像下所有服务)
脚本内容如下(如果是云服务器,注意在控制台开放端口)
#!/bin/shnpm install --registry=https://registry.npm.taobao.org
npm run build
docker build -t react-project .
docker kill $( docker ps | awk '/ci-project/ {print $1}')
docker run -d -p 3000:80 ci-project
脚本添加位置如图
至此,我们的配置工作就大功告成,再接再厉,开始构建!
构建任务
和之前没啥差别,返回任务详情,点击立即构建即可
当开始构建时,可以去查看构建任务详情,从而确定是否成功
成功的话,尝试访问下服务
【ip:3000】
如果能出现如下react服务界面,说明成功啦!
以上文章来源于公众号“微医大前端技术”
Jenkins+Docker持续集成(CI/CD)实战相关推荐
- Jenkins Docker 持续集成实践
前言 持续集成(CI/CD)是一种软件开发实践.用于帮助团队成员频繁.快速的集成,测试他们的工作成果,以尽快发现集成错误. 更频繁.更早的集成意味着更早的发现问题.通过持续集成,及时发现和解决代码故障 ...
- Jenkins Gitee 实现持续集成CI/CD工具【免费、推荐】
文章目录 1. Jenkins & Gitee持续集成流程 2. Jenkins安装Gitee插件 3. 插件配置 4. 安装NodeJS 5. 新建构建任务 5.1 General 5.2 ...
- centos7下Gitlab+Jenkins部署持续集成CI环境
1.基本环境 主机:win10,IP:192.168.0.111:部署机器centos7,IP:192.168.0.65: 内存推荐到8G,实测需要6G以上,以免出现内存不够用而报错. 2.安装git ...
- Jenkins与Docker的自动化CI/CD实战
一.发布流程设计 工作流程: 开发人员提交代码到Git版本仓库: Jenkins人工/定时触发项目构建: Jenkins拉取代码.代码编码.打包镜像.推送到镜像仓库: Jenkins在Docker主机 ...
- Docker+Jenkins持续集成环境(1)使用Docker搭建Jenkins+Docker持续集成环境
本文介绍如何通过Jenkins的docker镜像从零开始构建一个基于docker镜像的持续集成环境,包含自动化构建.发布到仓库\并部署上线. 0. 前置条件 服务器安装docker,并启动docker ...
- java docker 持续集成_最佳实战Docker持续集成图文详解
前言 关于Docker的文章铺天盖地,但精品文章往往翻译居多.都说Docker天生适合持续集成/持续部署,但同样,可落地.实际可操作性的文章也很罕见. 基于这些情况,虽然我们专栏定位为运维管理性文字, ...
- 持续集成 ci/cd_CI / CD即服务:在云中进行持续集成和交付的10种工具
持续集成 ci/cd 云和持续集成 (CI)是天生的匹配. 尽管云使我们摆脱了安装和维护物理服务器的痛苦,但持续集成可以自动消除构建,测试和部署代码的痛苦. 如果两家公司都希望把工作从开发团队的肩膀上 ...
- 持续集成、持续交付(CI/CD)开篇,先来唠唠嗑
前言 现在稍微有点规模的系统,很多都是采用分布式/微服务架构,将一个大系统拆分为很多个功能模块进行开发.测试.发布.管理等,如果全部流程都采用人工的形式进行的话,效率肯定是超级不高效滴.而且现在很多项 ...
- 【Jenkins】持续集成环境实战
pdf供下载:https://download.csdn.net/download/hancoder/19835802 1.持续集成及Jenkins介绍 2.Jenkins安装和持续集成环境配置 3. ...
最新文章
- 嵌入式python 图形界面_有哪些好的嵌入式操作系统界面库(GUI library)?
- Shell排序的原理与集体实现
- 实现一个队列类,该类用两个栈来实现
- Linux学习:shell 命令(用户管理)
- Vue.js过滤器概述
- Linux NTP服务配置 for Oracle RAC
- 【转】2.1(译)关于async与await的FAQ
- EXT扩展实例:在EXT4中检测Iframe的加载事件,并给它加上MASK
- php点击导入选择文件,关于怎么选定一个文件并打开的有关问题
- 单线程reactor
- Go基础-核心特性和前景
- Oracle 9i10g编程艺术 深入数据库体系结构
- Android计算器输入错误纠正,Android计算器低级错误?都是二进制惹的祸!
- 长江大学计算机网络期末考试试题及答案,长江大学计算机基础考试试题
- linux 7 恢复系统,CentOS 7在grub rescue模式中修复系统
- led同步回显到计算机屏幕,手把手教您如何将笔记本电脑的画面投屏到LED大屏幕上显示,音视频同步传输...
- Windows11 ISO原版系统镜像
- 【文件包含漏洞-03】文件包含漏洞的利用及如何利用本地文件包含漏洞GetShell
- Moto Z6 手机 联通GSM卡上网设置, 使用技巧及疑难问题解决
- TCP/IP协议详解(TCP/IP protocol)
热门文章
- python画易烊千玺_教你如何轻松画出逼真的易烊千玺
- keil 5 : Error: L6218E: Undefined symbol 问题解决方法小记
- 从零开始快速入门Transformer注意力机制
- html文档生成pdf离线文件,将Swagger2文档导出为HTML或markdown等格式离线阅读解析.pdf...
- 枚举法——python
- PMI2012:如何打造百万年薪的项目经理--赵弘
- 软件加密系统Themida应用程序保护指南(四):虚拟机的选择
- C#小游戏——贪吃蛇~详细过程+全部代码
- Caused by: java.sql.SQLException: Table ‘./commerce_sit/pgrels‘ is marked as crashed and last (autom
- 店宝宝:拼多多的成名史