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的CLI命令行运行模式浅析
在做开发的时候,我们不仅仅只是做各种网站或者接口,也经常需要写一些命令行脚本用来处理一些后端的事务.比如对数据进行处理统计等.当然也是为了效率着想,当一个事务有可能会有较长的耗时时,往往会交由服务器的 ...
- 【转】mysql实现随机获取几条数据的方法
sql语句有几种写法 1:SELECT * FROM tablename ORDER BY RAND() LIMIT 想要获取的数据条数: 2:SELECT *FROM `table` WHERE i ...
- java 小算法
//鸡兔同笼 20个头 58腿 for(int a=0;a<=20;a++) { int b = 20-a; if((2*b+4*a)==58) { System.out.println(a+& ...
- Maven项目创建与配置(二)
项目配置 1:添加Source Folder 右击项目>NEW>Source Folder maven规定必须创建一下几个Source Folder src/main/resources ...
- 疏忽Bug
仅供自己留存备份 错误: vector不是模板 解决: 头文件未包含 头文件: #include <vector> using namespace std; 错误: 多字节字符 ...
- CF605E-Intergalaxy Trips【期望dp】
正题 题目链接:https://www.luogu.com.cn/problem/CF605E 题目大意 给出\(n\)个点的一张完全有向图,每一天\(i\)到\(j\)的路径有\(p_{i,j}\) ...
- 📝 没 2 年 React Native 开发经验,你都遇不到这些坑
如果你喜欢我的文章,希望点赞 收藏 评论 三连支持一下,谢谢你,这对我真的很重要! React Native 开发时,如果只是写些简单的页面,基本上按着官方文档 reactnative.dev就能写出 ...
- Hyper-V CPU设置
前言 最近在用Hyper-V测试项目,发现在运行过程中发现项目总数崩掉,几经发现有一个共性,CPU占用率100%,分析问题发现问题出在Hyper-V CPU设置上,Hyper-V装系统就不赘述了,网上 ...
- CreateRemoteThread创建远程线程
要实现线程的远程注入必须使用Windows提供的CreateRemoteThread函数来创建一个远程线程 该函数的原型如下: HANDLE CreateRemoteThread( HANDLE hP ...
- dbus中的数据类型
DBus中也是类似于静态语言,使用了"强类型"数据格式.在DBus上传递的所有数据都需要声明其对应的类型,下面整理了下,DBus中的数据类型,以及在DBus中声明的数据类型是什么意 ...