本文主要记录如何通过docker安装jenkins,并且通过jenkins部署项目
前置准备:jenkins所在宿主服务器首先安装好jdk、maven
一、配置JDK环境
注意:选择适合自己的JDK,并且注意安装JDK的系统
地址:https://www.oracle.com/java/technologies/downloads/#java8
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9i4mM0ib-1691566629538)(img\jdk1.8下载.png)]](https://img-blog.csdnimg.cn/f0911d86d6a041fab5dddefd20539374.png)
1、卸载linux系统自带的JDK(建议直接用超级用户,不然卸载的时候可能会报权限不够的error,之后的操作也需要用root权限)
**1.1、切换用户:
su root
**
su root
**1.2、查看自带JDK命令:
rpm -qa | grep jdk
**
rpm-qa|grep jdk
**1.3、卸载自带JDK命令:
rpm -e --nodeps 要卸载的JDK
**
rpm-e--nodeps 要卸载的JDK
2、在usr/local目录下创建java目录,把我们下载好的JDK压缩包上传到 创建好的 java目录下(我放在该目录下了,也可以放在其他目录下)
**创建安装目录:
mkdir java
**
cd /usr/local
mkdir java
cd java
**3、把压缩包解压到当前目录(我们创建的java目录下),解压命令:
tar -zxvf 所要解压的文件名
**
tar -zxvf 所要解压的文件名
**4、编辑profile文件:
vim /etc/profile
**
把光标移到最后一行,键盘按 i,进入编辑模式,然后插入以下内容:(注意自己所建java的路径、jdk的名称)
JAVA_HOME=/usr/local/java/jdk1.8.0_381
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH
然后按ESC退出编辑模式,‘shift + :’,输入wq,回车,完成保存并退出
**5、让编辑的文件生效执行:
source /etc/profile
**
**6、最后验证JDK安装是否成功:
java -version
**
[root@aliyun ~]# cd /usr/local/java[root@aliyun java]# ls
jdk-8u381-linux-x64.tar.gz
[root@aliyun java]# tar -zxvf jdk-8u381-linux-x64.tar.gz[root@aliyun java]# vim /etc/profile[root@aliyun java]# source /etc/profile[root@aliyun java]# java -versionjava version "1.8.0_381"
Java(TM) SE Runtime Environment (build 1.8.0_381-b09)
Java HotSpot(TM)64-Bit Server VM (build 25.381-b09, mixed mode)
出现上述显示,则完毕!
二、配置Maven环境
1、准备Maven安装包
打开Maven官网:Maven – Download Apache Maven
我选择是3.9.3版本(选择适合自己的版本),找到后缀名是.tar.gz的文件下载,如图所示:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RHbW4iOk-1691566629539)(img\maven下载.png)]](https://img-blog.csdnimg.cn/7059b8a754dc4080a5c190de73d91b3b.png)
**1.1、创建安装目录:
mkdir maven
**
cd /usr/local
mkdir maven
cd maven
**1.2、把压缩包解压到当前目录(我们创建的maven目录下),解压命令:
tar -zxvf 所要解压的文件名
**
tar -zxvf 所要解压的文件名
1.3、解压完毕以后,新建一个repository仓库,用于存放Maven下载下来的jar包
mkdir repository
2、配置镜像
编辑settings.xml文件
vi apache-maven-3.9.3/conf/settings.xml按i键进入编辑模式
1.设置Maven仓库,就是我刚才新建的文件夹
**
<localRepository>/maven/repository</localRepository>**
2.配置为阿里云镜像地址**
<mirror>**
**<id>nexus-aliyun</id>**
**<mirrorOf>central</mirrorOf>**
**<name>Nexus aliyun</name>**
**<url>https://maven.aliyun.com/repository/public</url>**
**</mirror>**
按Esc键退出编辑模式,输入:wq保存并退出vim编辑器
3、配置环境变量
编辑profile文件
vim /etc/profile按i键进入编辑模式
添加如下环境变量
exportMAVEN_HOME=/usr/local/maven/apache-maven-3.9.3 exportPATH=$PATH:$MAVEN_HOME/bin
按Esc键退出编辑模式,输入:wq保存并退出vim编辑器
运行以下命令使profile文件生效
source /etc/profile检查环境配置是否成功
mvn -v
大功告成!
三、Jenkins环境搭建–Docker
#查看你需要安装的版本docker search jenkins
#安装镜像包docker pull jenkins/jenkins #默认安装最新版本#安装指定版本 指令入下docker pull jenkins/jenkins:xx(版本号)#查看是否安装成功(查看镜像包)docker images
1、使用以下命令下载Jenkins镜像(安装最新版)
docker pull jenkins/jenkins:latest
2、启动并创建Jenkins容器
#启动命令:docker run -u root -d\-p10240:8080 -p10241:50000 \-v /var/jenkins_home/workspace/:/var/jenkins_home/workspace/ \-v /var/run/docker.sock:/var/run/docker.sock \-v /usr/bin/docker:/usr/bin/docker \-v /usr/local/java/jdk1.8.0_381:/usr/local/java \-v /usr/local/maven/apache-maven-3.9.3:/usr/local/maven \-eJAVA_OPTS="-Dorg.apache.commons.jelly.tags.fmt.timeZone='Asia/Shanghai"\--name myjenkins jenkins/jenkins
#解释:-d :后台运行
-p:10240:8080 镜像8080 :端口映射到宿主机 10240端口
-p:10241:50000 镜像50000 :端口映射到宿主机 10241端口
-v:/var/jenkins_home/workspace/:/var/jenkins_home/workspace/
/var/jenkins_home/workspace/ 宿主机的Jenkins目录挂载路径 jenkins
/var/jenkins_home/workspace/ 镜像服务器中jenkins的工作目录
-v /usr/bin/docker:/usr/bin/docker : 挂载docker
-v /usr/local/java/jdk1.8.0_381:/usr/local/java : 挂载映射宿主机jdk
-v /usr/local/maven/apache-maven-3.9.3:/usr/local/maven : 挂载映射宿主机maven
-eJAVA_OPTS="-Dorg.apache.commons.jelly.tags.fmt.timeZone='Asia/Shanghai"\ :同步时间
--name myjenkins(自定义容器名称) jenkins/jenkins(需要映射容器名称)
如果执行命令发现jenkins没有启动成功,很大概率是因为挂载的目录没有权限,需要授权
chown-R1000:1000 /root/apply/jenkins_mount
chown-R1000:1000 /root/apply/apache-maven-3.8.4
chown-R1000:1000 /usr/local/jenkins
chown-R1000:1000 /etc/localtime
jenkins容器启动以后,咱们就需要到阿里云或者是腾讯云中,将端口为10240打开
浏览器访问:你的服务器ip:10240。不出意外,你就能访问到jenkins了。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7wwl3cLQ-1691566629541)(img\Jenkins访问页面.png)]](https://img-blog.csdnimg.cn/d244fdbfaadf4df099ed40a8d483c9ff.png)
3、进入容器,查看登录初始化密码,执行命令:
dockerexec-it myjenkins /bin/bash
cat /var/jenkins_home/secrets/initialAdminPassword
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rvq5FWU0-1691566629541)(img\查看Jenkins密码.png)]](https://img-blog.csdnimg.cn/49741b51d53c46ff9c60eb92d03bb6a9.png)
选择安装推荐插件
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-th1Nbqbf-1691566629542)(img\Jenkins新手入门.png)]](https://img-blog.csdnimg.cn/9e32cd7947744902be6ac9bef44d5650.png)
2.3版本安装插件很多失败,我换成了2.415版本
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6XxOiu3d-1691566629542)(img\2.415版本.jpg)]](https://img-blog.csdnimg.cn/826f4589136b46f29ad7b746941a8a98.jpeg)
安装完成后创建管理员用户
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t9EvSAGt-1691566629542)(img\Jenkins登录.png)]](https://img-blog.csdnimg.cn/f6b5b2a1bdca46408692cfe61d5cdfe5.png)
4、配置Jenkins
4.1、安装三个插件: Publish Over SSH和Maven Integration和GitLab ,点击: 系统管理->插件管理 -> 可选插件中进行输入安装。如下图所示:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WzkAvrGG-1691566629543)(img\插件管理.png)]](https://img-blog.csdnimg.cn/9eb7b385def74e539180cdb223dbc7c7.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0TnINMFi-1691566629543)(img\Jenkins安装插件.png)]](https://img-blog.csdnimg.cn/d978541db2bf475793b2f161a60ea2a5.png)
4.2、安装好上一步中的几个插件之后,接下来需要在jenkins中配置一下Git和SSH: 点击:系统管理 -> 系统配置 -> 找到Git和SSH
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yCa2jgOP-1691566629543)(img\Jenkins配置git.png)]](https://img-blog.csdnimg.cn/291bfc488cb34b7aaf3f2e8ffaacc4e1.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PnqexZI6-1691566629544)(img\添加git用户名密码.png)]](https://img-blog.csdnimg.cn/35462119cec44a1bbf8565eb0f2ebbe8.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TeKzNMJs-1691566629544)(img\Jenkins配置SSH.png)]](https://img-blog.csdnimg.cn/049f341661fc4fcf9e4afae2cb8d584d.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cPt6lBeD-1691566629544)(img\Jenkins配置SSH连接认证.png)]](https://img-blog.csdnimg.cn/be855c45515b45ea83d22c6c12fe4bd1.png)
4.3、配置JDK和Maven: 点击:系统管理 -> 全局工具配置 -> 找到JDK和Maven
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gZkEeE77-1691566629544)(img\Jenkins-jdk配置.png)]](https://img-blog.csdnimg.cn/a5f8652fac5445dd967fff00ef8d55d2.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QeH9sgzB-1691566629545)(img\Jenkins-maven配置.png)]](https://img-blog.csdnimg.cn/10144f337bdd43829fdbfc61873a57b0.png)
四、使用Jenkins构建项目
Jenkins中构建项目的类型有很多,常用的有以下三种:
- 自由风格软件项目(FreeStyle Project)(推荐)
- Maven项目(Maven Project)
- 流水线项目(Pipeline Project)(推荐)
实际上每种类型的构建都可以完成一样的构建过程与结果,只是在操作方式、灵活度等方面有所区别,在实际开发中可以根据自己的需求和习惯来选择。从灵活度上来说,流水线类型是最高的。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7Y9PTCCC-1691566629545)(img\Jenkins新建任务.png)]](https://img-blog.csdnimg.cn/bd6e3884ca1a402ea9e00a32216a54e0.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-whiKnAJZ-1691566629545)(img\Jenkins构建项目的几种方式.png)]](https://img-blog.csdnimg.cn/59c0df266d3d4dc8bc775a9510277891.png)
1、Pipeline流水线项目构建(推荐)
简单来说,Pipeline就是一套运行在 Jenkins 上的工作流框架,将原来独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排和可视化的工作。
Pipeline支持两种语法:声明式(Declarative)和脚本式(Scripted Pipeline)语法。
注意:需要安装Pipeline插件
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L4hOyyxh-1691566629546)(img\Jenkins流水线方式构建项目.png)]](https://img-blog.csdnimg.cn/bcd1b82e3f874be8a904b128325263ac.png)
1.1、声明式项目构建
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o9qr8GZP-1691566629546)(img\Jenkins流水线构建1.png)]](https://img-blog.csdnimg.cn/1d9bc216110843e7a6e701887278366f.png)
- stages:代表整个流水线的所有执行阶段,通常stages只有1个,里面包含多个stage。
- stage:代表流水线中的某个阶段,可能出现n个。一般分为拉取代码、编译构建、部署等阶段。
- steps:代表一个阶段内需要执行的逻辑。steps里面是shell脚本,git拉取代码、ssh远程发布等任意内容。
这里,我们编写一个简单声明式的Pipeline,来感受一下整个构建过程:
pipeline {
agent any
stages {
stage('拉取代码'){
steps {echo'拉取代码'}}
stage('编译构建'){
steps {echo'编译构建'}}
stage('项目部署'){
steps {echo'项目部署'}}}}
开始构建,并输出构建结果
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3N1hkQVW-1691566629546)(img\流水线简单构建输出结果.png)]](https://img-blog.csdnimg.cn/499337c1be9646bd9fca7fbe0ffd7b0c.png)
1.2、脚本式项目构建
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NVi2l1v0-1691566629547)(img\流水线脚本式构建.png)]](https://img-blog.csdnimg.cn/e976c036bd434d1f8d37b0dcbaf456d7.png)
- Node :节点,一个 Node 就是一个 Jenkins 节点,Master 或者 Agent,是执行 Step 的具体运行环境。
- Stage :阶段,一个 Pipeline 可以划分为若干个 Stage,每个 Stage 代表一组操作,比如:Build、Test、Deploy,Stage 是一个逻辑分组的概念。
- Step :步骤,Step 是最基本的操作单元,可以是打印一句话,也可以是构建一个 Docker 镜像,由各类 Jenkins 插件提供,比如命令:sh ‘make’,就相当于我们平时 shell 终端中执行 make 命令一样。
编写一个简单的脚本式Pipeline:
node{
def mvnHome
stage('Preparation'){echo'拉取代码'}
stage('Build'){echo'编译构建'}
stage('Results'){echo'项目部署'}}
开始构建,并输出构建结果
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ngtG5gQD-1691566629547)(img\流水线脚本式简单构建输出结果.png)]](https://img-blog.csdnimg.cn/ef7f68942d0f43508168224eabeb574d.png)
1.3、使用脚本构建项目
如果不会写流水线脚本,选择流水线语法可以自动生成Pipeline语法
点击【流水线语法】进入新页面
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EMyXTRhY-1691566629547)(img\选择流水线语法.png)]](https://img-blog.csdnimg.cn/759911b641c847898e251a9171ded889.png)
选择想要生成的流水线脚本,填写对应配置然后生成
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PqvgdZOj-1691566629548)(img\流水线语法生成.png)]](https://img-blog.csdnimg.cn/edd516bd21e445c08f55d5cedf561c77.png)
Git拉取代码流水线语句:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S3X3oF94-1691566629548)(img\Git流水线语句.png)]](https://img-blog.csdnimg.cn/fd962814b8a645a1bd767d16d5ba0e28.png)
连接服务器执行语句:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oi2rvkix-1691566629548)(img\SSH流水线语句.png)]](https://img-blog.csdnimg.cn/1a14ad724ae24876a556693ee5698498.png)
最终的流水线脚本:
pipeline {
agent any
tools {
maven "maven3.9.3"
jdk "jdk1.8"}
stages {
stage('拉取代码'){
steps {git credentialsId: '4ef30b0b-a335-4a6e-bfbe-151d59676f44', url: 'http://42.236.74.152:8050/fumingxing/cmcc-tenant.git'}}
stage('编译打包'){
steps {sh'''echo "开始构建"
mvn clean install-Dmaven.test.skip=true
echo"构建结束"'''
}}
stage("服务传输、启动"){
steps {
sshPublisher(publishers: [sshPublisherDesc(configName: 'mySSH', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''#第一步是进入到服务器中生成好的jar包的目录下cd /var/jenkins_home/workspace/mytest/ruoyi-admin/target
#第二步是根据jar包的名字获取运行的pid,并且将该进程杀死ps-ef|grep ruoyi-admin.jar |grep-vgrep|awk\'{printf $2}\' |xargskill-9#最后一步就是将这个jar后台启动了,并且将日志输出到out.log中。nohupjava-Xms128m-Xmx128m-Xss1024k-XX:MaxNewSize=64M -XX:MaxPermSize=64M -jar ruoyi-admin.jar >out.log 2>&1&''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: 'ruoyi-admin/target', sourceFiles: 'ruoyi-admin/target/ruoyi-admin.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])}}}}
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7i4B1S5i-1691566629549)(img\ssh流水线语句2.png)]](https://img-blog.csdnimg.cn/189d5a26f2f9445ea7e1101653ceb353.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FolSu2vs-1691566629549)(img\流水线构建效果.png)]](https://img-blog.csdnimg.cn/2bd8f7449918451aa5fecdafda51b4e1.png)
版权归原作者 努力成长的小白 所有, 如有侵权,请联系我们删除。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PdmhjRFw-1691566629540)(img\配置Maven仓库地址.png)]](https://img-blog.csdnimg.cn/8c621a2efc484788ac8e011f9630f180.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ezQ7Ximb-1691566629540)(img\配置Maven镜像地址.png)]](https://img-blog.csdnimg.cn/05ad2728506744f6ba15a0ceaed05a24.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CiPmFPe8-1691566629540)(img\配置Maven环境变量.png)]](https://img-blog.csdnimg.cn/b5d1e3019f38463385b41edc864b084f.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cftq2296-1691566629541)(img\检验Maven.png)]](https://img-blog.csdnimg.cn/25838c193d34425bb0d795087b597540.png)