Docker 搭建 Jenkins 持续集成自动化构建环境
1、Docker镜像拉取 Jenkins 环境命令
docker pull jenkins/jenkins:lts
查看下拉取的镜像
docker images
2、通过容器编排方式构建 Jenkins 容器
创建对应目录
# 创建对应目录
mkdir -p /data/jenkins/jenkins_home/
chown -R 1000:1000 /data/jenkins/jenkins_home/
+ data
- docker-compose.yml // docker-compose执行文件
+ /data/jenkins
- jenkins_home // Jenkins挂载卷
docker-compose.yml文件配置
version: "3"
services:
jenkins:
user: root
restart: "always"
image: jenkins/jenkins:lts
container_name: jenkins
privileged: true
ports:
- 8080:8080
- 50000:50000
environment:
JAVA_OPTS: -Duser.timezone=Asia/Shanghai
volumes:
- /data/jenkins/jenkins\_home/:/var/jenkins\_home
- /data/jenkins/workspace/:/root/.jenkins/workspace \
- /usr/local/apache-maven-3.6.0:/usr/local/maven
- /usr/local/maven/maven-3.6.0/repository:/usr/local/maven/repository
- /usr/local/jdk1.8.0_211:/usr/local/jdk
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
- /etc/localtime:/etc/localtime
- /usr/local/bin/docker-compose:/usr/local/bin/docker-compose
- /usr/lib/x86\_64-linux-gnu/libltdl.so.7:/usr/lib/x86\_64-linux-gnu/libltdl.so.7
- /root/.ssh:/root/.ssh # (可选)免密配置时,公钥可以直接在本地配置
3、启动容器环境
需要进入 compose 目录下面输入以下命令,进行环境的启动
docker-compose up -d
4、docker-compose 其它操作
镜像内容器进行操作后可以保存成新的镜像,比如容器内安装了jdk、配置了环境变量可以保存为新的镜像
# 找出当前运行的容器ID
docker ps
# 根据containerId,创建新镜像
docker commit 5d81d56b18b6 jenkins/jenkins:centos.v1
修改 docker-compose 可以对创建的容器根据新镜像进行修改
version: "3"
services:
jenkins:
user: root
image: jenkins/jenkins:lts
ports:
- 8080:8080
- 50000:50000
restart: "always"
container_name: jenkins
environment:
JAVA_OPTS: -Duser.timezone=Asia/Shanghai
#比如新增环境变量
java_home = xxx 仅做举例
volumes:
- /home/jenkins/jenkins\_home/:/var/jenkins\_home
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
- /usr/local/bin/docker-compose:/usr/local/bin/docker-compose
privileged: true
删除之前的容器
docker-compose down
重启成新的容器
docker-compose up -d
5、配置 Jenkins
前提,Jenkins 部署应用到远程服务器上,必须要实现 Jenkins 服务器免密登录到远程服务器上,同时远程服务器也要免密登录到 Jenkins 服务器上拷贝对应的jar包。所以,配置 Jenkins 前保证两台服务器互相免密登录。这块配置,可以查看我之前写的文字 [ Linux系统两台机器互免密登录 ],很简单。
5.1首先配置 ssh 插件
1、安装 ssh 相关的插件,直接在插件中心搜索 ssh 然后按装如下两个插件
①插件,主要用于链接远程服务器全局配置(公共配置);
②插件,主要用于链接远程服务器传文件配置,在项目里配置。
2、全局配置 Publish over SSH,系统管理->系统配置,下拉找到即可
第1个标注的地方,如果生成私钥的时候,没设置密码,不用填写任何内容留空即可;
第2个标注的地方,远程服务器的别名,随意起;
第3个标注的地方,远程服务器的地址;
第4个标注的地方,远程服务器的账号名称(登录名);
第5个标注的地方,远程服务器上要放置应用的目录,这里需要注意,后期项目配置的时候填写的目录跟这个是拼接的。
第6个标注的地方,点击高级后,展开下面的填入项。
第1个标注的地方,远程服务器的密码
第2个标注的地方,远程服务器的私钥。
3、项目(job)配置 ssh 插件相关的内容-前端VUE
新建一个job,输入名称,选择流水线项目,点击确定。
这里只演示,构建这个步骤的配置,其它配置很简单,自己网上一搜就可以。
上面的截图①,对应截图下面①、②两个步骤。
构建配置第一步,Jenkins 打包项目前端应用:
上图第1个标注地方,shell脚本如下。
#!/bin/bash
cd /data/jenkins/jenkins_home/workspace/data/xxx-all/xxx-admin
#这个目录也可写成如下这样,不同Jenkins版本可能有所不同,相对与打包工程的下一级目录开始。
./dev-xxx
npm install
npm run build
cd dist
tar -cvf dev-xxx.tar *
脚本,
第2行表示,Jenkins 服务期切换目录到 Jenkins 配置的 workspace 目录下的项目工程目录下。
第5、6行,前端应用打包命令。
第7行,切换到 dist 目录,(Jenkins打包前端应用后自动生成这个目录,打包的结果都在这个目录下)
第8行,将 dist 目录下的所有内容打包(*很重要),方便传输到远程服务器(部署服务器)。
构建配置第二步,将打包结果上传到远程服务器;
上面5个配置,逐一解释如下,这里如果配置不好,项目根本无法部署到远程服务器上。
①,远程服务器的名称(别名),前面全局配置的时候已经设置过了,这里下拉选择。
②,打包结果(源文件)的目录地址,即,Jenkins 上打包后产生的内容放置的地方,这个目录很容易填错,会把你搞死。该目录是Jenkins主目录下的工程目录开始的,即工程目录下一级开始填写。
③,删除前缀,要不然你的远程服务器又会创建dist这个目录。
④,远端目录,这里需要注意,我上面配置全局(公共配置)ssh的时候,已经填写了应用部署的远端目录,https://www.yuque.com/u21187464/cf/bo7lzr#GsmxQ 这里的第5个标记,此处是基于全局公共配置的目录的拼接。
⑤,将远程服务器执行的命令,如果是前端VUE项目,就是解压上面打包的项目,脚本如下。
脚本写法一:
# cd /data/xxx-all/xxx-admin/dev-xx.tar
# tar -zxvf dev-xx.tar
脚本写二(理论上面的写法没问题,我验证Jenkins会报错):
tar -xvf /data/xxx-all/xxx-admin/dev-xx.tar -C /data/xxx-all/xxx-admin/
脚本说明,
第一行,切换目录到远程服务器部署应用的目录,
第二行,解压应用包。
这里总结下上面配置的源文件(Sourec files)这个目录,很多坑。
Jenkins 构建后会在其工作空间 workspace 目录下产生对应项目的文件夹(这个文件夹名字是创建项目时命名的项目名,如下图),此时 workspace 目录下就会有api-dev这样的文件夹,
所以,源文件目录里填写的是这个文件夹之后的目录,不要把这个文件夹也填写。
4、项目(job)配置 ssh 插件相关的内容-java-jar包
因为上面讲过了,这里直接截图展示下,
Jenkins 构建后其工作目录产生的 api 项目目录如下。
①标识的地方,意思是先构建运行完成后,再传输jar包到远程服务器,我这里构建指 maven 构建后在传输。
②标识的地方,源文件目录,上面讲过了,api项目名称后面的目录开始填写。
③标识的地方,删除前缀,jar包前面的目录都删除,要不然远程服务器上会创建这个目录。
6、总结
1、Jenkins 编译构建后,需要将应用包(jar包、war包等)部署到远程服务器上,所以,必须保证 Jenkins 服务器和远程服务器互相免密访问,配置上面已经说过了。
2、如果你的 Jenkins 服务器和应用服务器部署在 docker 容器里的话,需要保证两个容器互相免密登录,具体配置跟上面提到的配置一样,只是需要在容器里操作而已。
3、上面 Jenkins 打包配置我举例的是前端 vue 打包的结果,压缩成压缩包和上传部署到远程服务器的过程,如果api部署的话,流程大概一样,只是不需要压缩和解压而已。
读后感
来这里找我交流
QQ群:330374464
公众号:软件测试资源站(ID:testpu)
Docker 搭建 Jenkins 持续集成自动化构建环境的更多相关文章
- 个人环境搭建——搭建jenkins持续构建集成环境
---恢复内容开始--- 搭建jenkins持续构建集成环境 要搭建jenkins持续构建集成环境,首先要安装tomcat和JDK: 第一部分,基本说明: 敏捷(Agile) 在软件工程领域 ...
- Docker搭建Jenkins+Maven/Gradle——代码自动化运维部署平台(二)
一.简介 1.Jenkins 概述: Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台.这是一个免费的源代码,可以处理任何类型的构建或持续集成.集成Jenkins ...
- Jenkins持续部署-Windows环境持续部署探究1
目录 Jenkins持续部署-Windows环境持续部署探究1 目录 前言 目的 方案流程 技术实现 PowerShell FTP上传插件 环境变量插件 脚本执行 远程调用 升级服务 启动服务 总结 ...
- 使用Docker搭建Jenkins+Docker持续集成环境(自动化构建发布部署)
本文介绍如何通过Jenkins的docker镜像从零开始构建一个基于docker镜像的持续集成环境,包含自动化构建.发布到仓库\并部署上线. 0. 前置条件 服务器安装docker,并启动docker ...
- 构建Docker+Jenkins持续集成环境
docker和Jenkins不是什么新东西了,两者结合也不是什么稀奇的事情,也已经有很多Jenkins和docker相结合的文章,此文仅为自己的一点心得实践,如有不对的地方,欢迎大家纠正. 先贴上大致 ...
- Docker+Jenkins持续集成环境(1)使用Docker搭建Jenkins+Docker持续集成环境
本文介绍如何通过Jenkins的docker镜像从零开始构建一个基于docker镜像的持续集成环境,包含自动化构建.发布到仓库\并部署上线. 0. 前置条件 服务器安装docker,并启动docker ...
- Hudson(Jenkins)持续集成插件开发环境搭建
Hudson持续集成插件开发环境搭建 第一步安装java jdk,至于版本的话推荐1.6以上吧.安装好jdk设置环境变量,确保你在cmd中输入java -version有提示你jdk的版本信息等,也就 ...
- Docker搭建Jenkins+Gogs+Maven/Gradle——代码自动化运维部署平台(三)
一.简介 1.CI/CD CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法.CI/CD 的核心概念是持续集成.持续交付和持续部署.作为一个面向开发和运营团队的解决方案,CI/C ...
- CentOS 7 部署Gitlab+Jenkins持续集成(CI)环境
持续集成概述及运行流程 : 持续集成概述 :持续集成(Continuous integration)持续集成是指开发者在代码的开发过程中 ,可以频繁的将代码部署集成到主干,并进行自动化测试 开发→代 ...
随机推荐
- php升级版本后的影响5.5->7.1
微信开发中之前常用到$GLOBALS['HTTP_RAW_POST_DATA'] ,但升级后这个参数不见了,导致了一系列错误, 可以用 file_get_contents('php://input') ...
- 如何在Ubuntu 18.04安装Git
在Ubuntu 18.04安装Git 更新apt包列表 apt-get update -y apt-get upgrade -y 安装Git: apt install git 检查Git版本 git ...
- golang 开发环境 配置 go语言 liteIDE
Mac: * 下载go安装包 go语言中文网 ** 通过源码编译安装需要先安装go1.4 wget https://studygolang.com/dl/golang/go1.10.3.src.tar ...
- px em rem区别
国内的设计师大都喜欢用px,而国外的网站大都喜欢用em和rem,那么三者有什么区别,又各自有什么优劣呢? PX特点 1. IE无法调整那些使用px作为单位的字体大小: 2. 国外的大部分网站能够调整的 ...
- Consul+Ocelot+Polly在.NetCore中使用(.NET5)-Ocelot+Polly缓存、限流、熔断、降级
相关文章 Consul+Ocelot+Polly在.NetCore中使用(.NET5)-Consul服务注册,服务发现 Consul+Ocelot+Polly在.NetCore中使用(.NET5)-网 ...
- P3291-[SCOI2016]妖怪【凸壳】
正题 题目链接:https://www.luogu.com.cn/problem/P3291 题目大意 给出 \(n\) 个数字对 \((atk,dnf)\),求一个\((a,b)\). 对于每个数字 ...
- 51nod1676-无向图同构【乱搞】
正题 题目连接:http://www.51nod.com/Challenge/Problem.html#problemId=1676 题目大意 给出两张\(n\)个点\(m\)条边的无向图,求这两张图 ...
- P3214-[HNOI2011]卡农【dp】
正题 题目链接:https://www.luogu.com.cn/problem/P3214 题目大意 一个由\(1\sim n\)的所有整数构成的集合\(S\),求出它的\(m\)个不同非空子集满足 ...
- CF708E-Student‘s Camp【数学期望,dp】
正题 题目链接:https://www.luogu.com.cn/problem/CF708E 题目大意 有\(n*m\)的矩形网格,然后每次每行最左边和最右边的格子各有\(p=\frac{c}{d} ...
- AT4518-[AGC032C]Three Circuits【欧拉回路】
正题 题目链接:https://www.luogu.com.cn/problem/AT4518 题目大意 给出\(n\)个点\(m\)条边的一张简单无向联通图,求能否把它分成三个可重复点的环. \(1 ...