Jenkins

一. 基础

  1. jenkins有三个概念: 持续部署, 持续集成, 持续交付
  2. 解释使用jenkins的原因: 普通的项目部署流程, 当项目开发完毕,通过maven或其他方式将项目打包(mvn package),将打包后的文件上传到服务器上运行(或在windows下,通过当前jar包所在路径打开cmd, 输入”java -jar”,点击要运行的jar包拖到cmd命令窗口,回车运行), 比较繁琐, 通过jenkins与git实现自动化部署,代码编写完毕后,通过git将代码推送到管理平台github或码云,开发者在jenkins平台创建自动化任务通过jenkins,读取管理平台的代码,通过jenkins自动化打包,通过jenkins执行shell脚本,启动代码
  3. 使用jenkins最终的目标是
  1. 降低风险: 多次集成,并做了相应的测试,有利于健康状况的了解,减少假定
  2. 减少重复过程: 正常情况下需要手动编译,测试,打包,发布, 将手动更换为通过jenkins自动化实现
  3. 任何时间任何地点,只要能连接jenkins,通过jenkins即可打包发布
  1. jenkins与Hudson: jenkins大部分是由原Hudson人员开发,
  2. jenkins可以整合GitHub或Subversion

二. 基于Docker安装Jenkins到linux服务器

  1. 进入linux,输入进入docker的命令: # docker ps (前提linux服务器安装了docker)
  2. 输入通过docker安装jenkins命令(该命令是启动jenkins,如果本机中没有,下载后启动,第一次下载的实际可能比较长,显示INFO: STARTED INITIALIZATION表示启动成功,注意启动成功后需要关闭防火墙):

#docker run -p 8080:8080 -p 50000:50000 -v jenkins_data:/var/jenkins_home jenkinsci/blueocean

  1. 访问jenkins,默认端口号是8080 (ip:端口号直接访问,注意第一次启动访问时,会加载一下配置文件,在该页面可能会等待3-10分钟)
    在这里插入图片描述
  2. 解锁jenkins,在安装的jenkins目录中找到jenkins的initialAdminPassword文件,在文件中找到jenkins管理员密码,复制密码,粘贴到访问的页面输入框中,该存放密码的日志文件在docker容器中的"/var/jenkins_home/secrets/initialAdminPassword",目录下,需要进入docker容器中,然后打开查看:
  1. 输入进入docker容器的命令,查看docker容器id: # docker ps 会显示一个英文与数字混合的12位字符串,复制字符串容器id
  2. 输入进入docker容器的命令: # docker exec -it 7f485bd95c3b(复制的容器id) /bin/bash
  3. 进入jenkins容器,打开initialAdminPassword文件的命令,查看文件中的管理员秘钥,复制秘钥
    cat /var/jenkins_home/secrets/initialAdminPassword
  4. 将秘钥粘贴到
    在这里插入图片描述
  1. 进入新手入门页,安装插件,点击安装推荐的插件
    在这里插入图片描述
    在这里插入图片描述
  2. 插件下载完毕设置管理员用户账号密码
    在这里插入图片描述
  3. 完毕
    在这里插入图片描述

三. 配置Jenkins

  1. 点击系统管理—>点击全局工具配置,配置jenkins使用的jdk与maven
    在这里插入图片描述
  2. 配置jenkins的jdk环境, 首先要进入安装的jenkins容器中查看jdk目录输入” echo $JAVA_HOME”命令,会显示安装的jdk目录,复制目录
    在这里插入图片描述
  3. 配置maven版本
    在这里插入图片描述
  4. 安装maven Interation插件,点击系统管理----点击插件管理----点击可选插件----搜索Maven Integration,选中点击直接安装, 安装完成后点击安装完成后重启(jenkins自动化部署默认不支持部署maven项目,需要使用该插件)
    在这里插入图片描述

四. 配置jenkins连接代码管理平台,实现自动部署

  1. Jenkins访问页面中点击新建任务,输入任务的发布名称,点击构建一个maven项目,点击确定
    在这里插入图片描述
  2. 此时jenkins右侧会出现当前jenkins管理的项目,点击项目----点击左侧配置,复制项目代码在github,或码云的克隆地址,勾选配置页的git, 将复制的克隆地址粘贴到配置页的Reponsitory URL处, 并在Credentials添加自己登入github或码云账户与密码
    在这里插入图片描述
  3. 配置页下拉到Build, 在Bulid的Root POM中输入pom.xml, Goals and options中输入”clean install” 最后点击保存
    在这里插入图片描述
  4. 点击右侧立即构建,代码构建后会在docker容器中
  5. linux中输入”# docker ps”命令获取docker容器id, 输入一下命令进入docker容器

#docker exec -it 7f485bd95c3b(复制的容器id) /bin/bash

  1. 配置页中点击控制台输出,查看
    在这里插入图片描述

五. 通过jenkins运行打包好的项目

  1. 通过jenkins运行打包好的项目: 登入jenkins页面, 点击需要运行的项目,点击左侧配置按钮,右侧下方找到Post Steps, 点击Add post-build step选择执行shell,会出现一个输入框,输入一下shell脚本代码(下面的红色部分需要修改,修改的数据可以在第四的第6步中获取到), 点击保存, 点击立即构建
#!/bin/bash
#服务名称此处的名称推荐与发布运行的项目名称一致
SERVER_NAME=mayikt_springboot 
#打包后生成的项目jar包名字,有点像target目录下的jar包名称,如果生成的是war包war包可移动到Tomcat的webapps目录下运行,这里使用jar包,用java -jar 命令执行  
JAR_NAME=mayikt_springboot-0.0.1-SNAPSHOT
# 源jar路径  
#/usr/local/jenkins_home/workspace--->jenkins 工作目录
#demo 项目目录
#jenkins打包项目后,打的包所在位置(docker容器中,)
JAR_PATH=/var/jenkins_home/workspace/mayikt_springboot/target
# 打包完成之后,把jar包移动到运行jar包的目录--->work_daemon,work_daemon这个目录需要自己提前创建(jenkins打包项目后,打的包所在位置(docker容器中,)与上面的一样)
JAR_WORK_PATH=/var/jenkins_home/workspace/mayikt_springboot/target

echo "查询进程id-->$SERVER_NAME"
PID=`ps -ef | grep "$SERVER_NAME" | awk '{print $2}'`
echo "得到进程ID:$PID"
echo "结束进程"
for id in $PID
do
	kill -9 $id  
	echo "killed $id"  
done
echo "结束进程完成"

#复制jar包到执行目录
echo "复制jar包到执行目录:cp $JAR_PATH/$JAR_NAME.jar $JAR_WORK_PATH"
cp $JAR_PATH/$JAR_NAME.jar $JAR_WORK_PATH
echo "复制jar包完成"
cd $JAR_WORK_PATH
#修改文件权限
chmod 755 $JAR_NAME.jar
#启动打包的项目命令(前台启动,会一直转圈,需要修改为后台启动,查看下面第3步)
java -jar $JAR_NAME.jar
  1. 注意jenkins是通过容器进行部署的,项目,jar包服务也是通过容器运行的,运行项目后如果直接访问可能访问不到, 需要设置端口映射(linux上操作,注意关闭防火墙)
  1. 重启容器: systemctl restart docker
  2. 清空未运行的容器: docker rm $(sudo docker ps -a -q)
  3. 输入映射端口命令(8087是jenkins打包运行的项目访问端口号,-p表示外部映射内部的端口号,外部访问容器的8087端口号,容器接收到8087,访问内部的8087)

docker run -p 8080:8080 -p 8087:8087 -p 50000:50000 -v jenkins_data:/var/jenkins_home jenkinsci/blueocean

  1. 重新访问jenkins页,登入,点击需要打包运行的项目,点击立即构建即可
  1. 注意点如果使用上面的shell脚本启动项目,因为shell脚本中的启动命令是”java -jar” ,属于前台启动方式,如果在配置页中点击”立即构建”,打包项目运行项目,可能会一直在开始启动状态—到不了启动完成状态,会一直转圈,修改shell脚本代码
#!/bin/bash
#服务名称
SERVER_NAME=mayikt_springboot
# 源jar路径,mvn打包完成之后,target目录下的jar包名称,也可选择成为war包,war包可移动到Tomcat的webapps目录下运行,这里使用jar包,用java -jar 命令执行  
JAR_NAME=meitedu_springboot-0.0.1-SNAPSHOT
# 源jar路径  
#/usr/local/jenkins_home/workspace--->jenkins 工作目录
#demo 项目目录
#target 打包生成jar包的目录
JAR_PATH=/var/jenkins_home/workspace/meitedu_springboot/target/
# 打包完成之后,把jar包移动到运行jar包的目录--->work_daemon,work_daemon这个目录需要自己提前创建
JAR_WORK_PATH=/var/jenkins_home/workspace/meitedu_springboot/target/

echo "查询进程id-->$SERVER_NAME"
PID=`ps -ef | grep "$SERVER_NAME" | awk '{print $2}'`
echo "得到进程ID:$PID"
echo "结束进程"
for id in $PID
do
	kill -9 $id  
	echo "killed $id"  
done
echo "结束进程完成"

#复制jar包到执行目录
echo "复制jar包到执行目录:cp $JAR_PATH/$JAR_NAME.jar $JAR_WORK_PATH"
cp $JAR_PATH/$JAR_NAME.jar $JAR_WORK_PATH
echo "复制jar包完成"
cd $JAR_WORK_PATH
#修改文件权限
chmod 755 $JAR_NAME.jar

#启动打包的项目命令(后台启动)
BUILD_ID=dontKillMe nohup java -jar  $JAR_NAME.jar  &

六. Jenkins Pipeline

  1. Pipeline在Unix/Linux系统中经常用到, Pipeline将一个命令/程序/进程的输出发送到另一个命令/程序/进程,以进行进一步处理。比如:cat test.txt | grep test1。Jenkins 中的Pipeline借用了Unix/Linux中的 Pipeline思路,实现像流水线一样来调度Jenkins任务,通过Jenkinsfile来描述整个持续集成流程
  2. 新建pipeline任务
    在这里插入图片描述
  3. 编写Pipeline脚本可选择Pipline script或者Pipline script from SCM

Pipline script模式是将脚本写在下面的输入框中
Pipline script from SCM是将Pipeline script放到Git或者SVN上,执行的时候从上面拉下来执行

  1. Pipeline Script,编写如下代码
pipeline {
    agent any
    stages {
        stage('begin') {
            steps {
                echo 'Hello pipeline'
                }
        }
    }
    post {
        always {
            echo 'say goodbay'
            }
    }
}

Pipline script模式是将脚本写在下面的输入框中

stages:添加执行步骤
post:任务执行完成后执行的操作
在这里插入图片描述

Pipeline Script from SCM

  1. Pipeline Script除了写在jenkins界面以外,也可以放入git源码库进行管理,在 Jenkins Pipeline任务中选择 Pipeline script from SCM
    在这里插入图片描述
  2. 添加git源码地址,在 Script Path中填写需要运行的Jenkinsfile文件所在的地址
    在这里插入图片描述
  3. 创建完成后保存,点击Build Now,我们可以看到不同构建阶段进度
    在这里插入图片描述
  4. 构建日志
    在这里插入图片描述

七. Jenkinsfile语法

  1. 上面Pipeline Script编写的代码就可以看为jenkinsfile代码,先了解一个jenkinsfile语法
  2. 参考博客

八. Jenkinsfile的使用

  1. pipeline项目中,可以直接在jenkins的web UI上编写pipeline脚本,还有一种方法是使用Jenkinsfile,它放在源码管理库中,比如github、SVN等。为了使pipeline项目管理更加方便,也就是Pipeline script from SCM模式, 将pipeline脚本保存到jenkinsfile文件中,与项目代码一块存入git
  2. 编写jenkinsFile需要先了解jenkinsFile语法
  3. 参考博客
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值