Jenkins基础学习
Jenkins基础学习
1.环境准备
1.搭建gitlab平台(docker)
gitLab安装官网:GitLab最新版下载安装_GitLab中文免费版-极狐GitLab中文官方网站
gitlab官网:The DevSecOps Platform | GitLab
docker安装官网:Install Docker Engine on CentOS | Docker Documentation
1.安装环境
- 使用 VMware虚拟机
- 虚拟机安装Centos7的系统
- 虚拟机内存7.6G(gitLab需要安装的东西比较多,运行时需要占用比较大的内存)
- 硬盘50G
- 虚拟机内安装Docker Engine
2.安装步骤
1.配置网络ip
# 编辑网络文件ifcfg-ens33 vim /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="static" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="ens33" UUID="11c21173-4fe9-49ee-a695-d640d6cde130" DEVICE="ens33" ONBOOT="yes" #IP地址 IPADDR=192.168.0.140 #网关 GATEWAY=192.168.0.2 #域名解析 DNS1=8.8.8.8 NETMASK=255.255.255.0 # 保存后重启网络服务 service network restart # 检验是否与外界连通 ping www.baidu.com
2.检查docker是否安装,开启
# docker已经安装 systemctl status docker #查看docker状态 #如果没有开启则启动docker systemctl start docker
3.安装运行gitlab
官方文档命令
sudo docker run --detach \ --hostname gitlab.example.com \ --publish 443:443 --publish 80:80 --publish 22:22 \ --name gitlab \ --restart always \ --volume $GITLAB_HOME/config:/etc/gitlab \ --volume $GITLAB_HOME/logs:/var/log/gitlab \ --volume $GITLAB_HOME/data:/var/opt/gitlab \ --shm-size 256m \ registry.gitlab.cn/omnibus/gitlab-jh:latest
改成我们的命令
docker run --detach \ --hostname 192.168.0.140 \ --publish 443:443 --publish 80:80 \ --name gitlab \ --restart always \ --volume $GITLAB_HOME/config:/etc/gitlab \ --volume $GITLAB_HOME/logs:/var/log/gitlab \ --volume $GITLAB_HOME/data:/var/opt/gitlab \ --shm-size 256m \ registry.gitlab.cn/omnibus/gitlab-jh:latest
⚠gitLab镜像比较大,可以喝杯咖啡再来。😁
常用基本docker命令
#查看 docker 镜像 docker images #查看所有容器 docker ps -a #删除容器 docker rm -f 容器
查看容器运行情况
4.访问gitlab
在浏览器输入服务器地址
192.168.0.140
⚠如果出现无法访问时
查看防火墙的状态,将防火墙关闭(为了方便,同样可以开放端口)
#查看firewalld 状态 systemctl status firewalld #关闭防火墙 systemctl stop firewalld
关闭防火墙后再次使用浏览器访问,就会出现登录界面
5.登录gitlab
gitlab会默认生成一个root用户
查看root用户的密码
#进入容器 docker exec -it gitlab /bin/bash #查看密码 cat /etc/gitlab/initial_root_password
⚠密码文件过了24小时候将会被删除,所以要么将密码记住,要么修改用户密码
6.修改用户密码
1.修改为中文
1.点击用户头像->点击Preferences
2.找到Localization->Language设置为简体中文
保存后刷新一下就会变成中文。
2.修改root用户密码
1.进入用户编辑页面
2.修改密码->保存
3.重新用新密码登录
7.新建项目
1.创建项目
2.创建空白项目
3.创建项目
3.创建项目
1.创建一个SpringBoot Demo
@RestController public class Hello { @GetMapping("/hello") public String hello(){ return "hello world!"; } }
2.关联远程地址
使用http第一次关联要输入用户名和密码
3.本地启动运行访问
在浏览器输入
localhost:8080/hello
页面显示hello world!
说明可以成功访问
4.将项目推送到远程合并到主分支main
将本地代码push到远程中
合并分支
查看main分支
已将代码合并到了主分支上。现在远程仓库中已经有了代码,下一步将会构建Jenkins服务。
🍵喝口咖啡!!先放松一会儿吧!!!
2.搭建Jenkins平台
Jenkins安装官网:安装Jenkins
maven官网:https://maven.apache.org
Jenkins安装不使用docker,因为Jenkins本身就是个java项目,我们通过运行java程序来启动Jenkins。
1.安装环境
- 使用 VMware虚拟机
- 虚拟机安装Centos7的系统
- 虚拟机内存2G
- 硬盘50G
- 安装JDK,maven,git
2.安装步骤
1.安装JDK
1.查找JDK版本
yum search java|grep jdk
2.安装JDK-11
yum install -y java-11-openjdk
linux安装多个版本的JDK并且切换版本
1.查看当前服务器的JDK版本库
alternatives --config java
2.配置java全局环境,编辑profile文件
vim /etc/profile #修改文件 #JAVA_HOME 为上面查看到的java版本的地址 export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.18.0.10-1.el7_9.x86_64 export PATH=$JAVA_HOME/bin:$PATH
这样就可以切换java的版本了。
无法使用jps命令
注:jps是用来查看java项目进程的。
#要安装后缀带devel的JDK yum install java-11-openjdk-devel.x86_64
2.安装maven
1.进入官网下载maven二进制包,上传到服务器
2.将tar包解压缩
tar -zxvf apache-maven-3.8.7-bin.tar.gz
3.将解压缩后的文件夹移动到/usr/local/maven
mv apache-maven-3.8.7 /usr/local/maven
4.在根路径检查是否可以执行mvn命令
mv apache-maven-3.8.7 /usr/local/maven
3.安装git
yum install git
4.安装Jenkins
1.下载Jenkins.war包
选择合适的版本,因为安装的是JDK-11我选择
2.将下载好的war包上传到服务器中
3.使用java命令启动Jenkins
java -jar jenkins.war
4.访问服务器地址
浏览器输入:http://192.168.0.141:8080/
无法访问时,查看防火墙的状态。
⚠没有出现时,请耐心的等一会
下一步选择推荐插件
等待....
按要求创建完用户后一路下一步
说明Jenkins平台搭建好了,我们先休息一下!!!
下一步搭建测试服务器,就是用来跑项目的服务。
搭建项目测试平台(test-service)
1.安装环境
- 使用 VMware虚拟机
- 虚拟机安装Centos7的系统
- 虚拟机内存2G
- 硬盘50G
- 安装JDK
2.安装步骤
1.安装JDK
1.查找JDK版本
yum search java|grep jdk
2.安装JDK-8
yum install -y java-1.8.0-openjdk
注意事项和Jenkins里面一样。
2.使用Jenkins构建项目
1.使用Jenkins配置maven+Git自动构建jar包
1.安装maven插件
配置maven
2.构建项目
3.配置构建的项目
- 配置git
Repository URL --git地址 http://192.168.0.140/root/my-first-demo.git Credentials -- 凭证 gitlab 登录用户 Branches to build --构建的分支 我们选择主分支-main
配置git用户
类型:我们使用的是http所以选择 `Username with password`选项 用户名:root 密码:gitlab登录的密码
build操作
4.配置完后可以构建一次
第一次构建的时间比较长,因为要拉依赖。
查看项目信息
点击控制台输出->可以查看构建的命令。
查看控制台信息为build success就说明构建成功了。
可以在控制台看到jar包的所在位置
进入服务器查看。确实可以看到构建好的jar包了
我们使用java命令运行看看行不行
#因为Jenkins使用了8080端口,我们改成8081端口 java -jar my-first-demo-0.0.1-SNAPSHOT.jar --server.port=8081
项目正常启动,使用浏览器访问192.168.0.141:8081/hello
显示正常效果。
说明构建成功。
5.出现的问题
⚠如果出现构建错误,依赖包下载慢,或者下载不下来,可以配置国内的阿里仓库
cd /usr/local/maven/conf #编辑settings.xml文件,将里面的镜像设置为阿里仓库
2.将构建的jar发送到测试服务器并启动项目
1.安装ssh插件
2.配置ssh服务
在System Configuration里面。
配置完可以点击测试是否成功。
3.配置demo项目的构建后的操作
选择:send build artifacts over ssh
修改好后保存再次构建。看看效果
构建成功:
查看test-service是否有jar包
cd /test ls
说明成功的将jar传送到test-service服务器上
4.配置构建执行的命令
nohup java -jar /root/test/my-first-demo*.jar >mylog.log 2>&1 & #nohup 就是不挂断 #最后面的& 表示在后台运行 #>mylog.log 2>&1 表示将日志输出到mylog.log文件中。 # java -jar /root/test/my-first-demo*.jar 启动java程序
数据流重定向
标准输入:代码为0,使用<或<<
标准输出:代码为1,使用>或>>
标准错误输出:代码为2,使用2>或2>>
其中:>表示覆盖写,>>表示追加写。
再次构建就会自动的将我们的jar包运行,但是第一次可以再次构建时,就会发现项目无法启动,因为之前的项目还在运行,服务的端口会被占用。
接下来我们就要实现在构建之前将之前的启动的项目停下来并把jar删除调。
5.构建前将原来的项目停止
1.配置 Pre Steps
2.编写run.sh脚本
vim run.sh
-- 脚本 #!/bin/bash #删除目标的目录 rm -rf test #获取传入的参数 echo "args: $1" appname=$1 #获得运行的jar包pid pid=`ps -ef | grep $1 | grep 'java -jar' | awk '{printf $2}'` echo $pid #判断pid是否存在 if [ -z $pid ]; then echo “$appname no started...” else kill -9 $pid echo "$appname stoping..." #判断是否删除进程 check=`ps -ef | grep -w $pid | grep 'java -jar'` if [ -z $ckeck ]; then echo "$appname pid:$pid si top" else echo "$appname stop failed" fi fi
更改run.sh的权限
chmod 777 run.sh
在服务器上执行run.sh试试
#参数为项目的名称 ./run.sh my-first-demo
再次使用Jenkins构建项目则会使用到最新的程序。
使用浏览器访问:192.168.0.142:8080/hello
获取到最新的代码
⚠构建之前,提交代码记得要将提交的代码合并到主分支上。
3.提交代码自动构建项目(不是很实用)
上面测试都是需要手动构建项目。接下来在这里实现提交代码后Jenkins自动构建。
1.触发远程构建
1.配置触发器
2.测试触发器
当访问http://192.168.0.141:8080/job/demo/build?token=123123则会触发构建任务
⚠因为使用的是Jenkins登录了的浏览器访问的,如果浏览器没有登录,则会跳转到登录界面,如果直接配置到gitlab中将不会生效。
解决:安装插件 Build Authentication token root
访问这个地址http://192.168.0.141:8080/buildByToken/build?job=demo&token=123123
将不需要登录,具体写法的可以查看插件里面的介绍。
3.配置gitlab
无法添加webhooks时,先配置这个,再去配置webhooks
添加成功时:出现
2.常见的构建方式
-
快照依赖构建/Build whenever a SNAPSHOT dependency is built
- 当依赖的快照被构建时执行job
-
触发远程构建(例如,使用脚本)
- 远程调用本job的restapi时执行job
-
job依赖构建/Build after other projects are built
- 当依赖的job被构建后再执行本job
-
定时构建/Build periodically
- 使用cron表达式定时构建job
-
向github提交代码是触发Jenkins自动构建/GitHub hook trigger for GITScm polling
- github-webhooks触发时构建job
-
定期检查代码变更/Poll SCM
- 使用cron表达式定期检查代码变更,变更后构建job
4.配置邮箱接收通知
1.配置发送邮件服务器
使用163的邮箱
1. 开启smtp服务
2.配置Jenkins systemConfig
用户配置
3.配置job的构建后操作
选择:Editable Email Notification
4.测试
在任务控制台查看输出
同时目标邮箱收到邮件。说明成功了!!!
5.容器化构建
- 外挂目录
- jar直接打包到镜像中
- 生成镜像,推送到docker私服中,再通过k8s拉取,运行。
1.外挂目录
1.本地测试
1.将jar包放在/root/jarfile文件夹中
2.docker 运行容器
docker run -d -p 8080:8080 --name demo-out -v /root/jarfile/my-first-demo-0.0.1-SNAPSHOT.jar:/app.jar openjdk:11 java -jar app.jar
用浏览器访问:192.168.0.142:8080/hello
显示正常。说明成功
2.上面是测试,下面使用Jenkins来构建
1.配置 pre steps
2.配置构建后操作
这样做,第一次必须要自己先把demo-out容器构建起来才行。没有每次构建前删除镜像,然后构建玩后生成新的镜像,只是使用了之前的容器,把挂载的jar包更换了
3.提交代码后测试
提交新的代码到gitlab上,浏览器访问:192.168.0.142:8080/hello
访问到新提交的代码,说明没有问题。
2.将jar打包到容器中,构建镜像。
1.本地测试
1.环境
- 具有docker
- 支持JDK镜像
FROM openjdk:11 COPY . /usr/src/myapp WORKDIR /usr/src/myapp RUN javac Main.java CMD ["java", "Main"]
2.编写dockerfile文件
vim dockerfile FROM openjdk:11 EXPOSE 8080 WORKDIR /root ADD jarfile/my-first-demo*.jar /root/app.jar ENTRYPOINT ["java","-jar","/root/app.jar"]
3.构建我们自己的docker镜像
docker build -t demo .
docker images 查看构建的镜像
2.使用Jenkins来构建
1.配置 pre steps
2.配置构建后的操作
- 将jar包上传到jarfile文件夹中
- 将dockerfile文件放在项目中,并将其传到测试服务器中
3.提交代码测试
提交新的代码到gitlab上,浏览器访问:192.168.0.142:8080/hello
构建成功。。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!