Jenkins
VMware安装参考:https://blog.csdn.net/weixin_52799373/article/details/124324077?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171065735716800225589157%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=171065735716800225589157&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-124324077-null-null.142^v99^pc_search_result_base5&utm_term=%E4%B8%83%E7%BB%B4%E5%A4%A7%E8%84%91&spm=1018.2226.3001.4187
网路配置参考:https://blog.51cto.com/u_15127626/2734707
jenkins参考:https://www.bilibili.com/video/BV1bS4y1471A?p=1
1. 搭建Gitlab
1.1 安装docker
- 更新yum源
yum update
- 安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
- 添加镜像
//国外镜像
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
//阿里镜像
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 查看源中可使用版本
yum list docker-ce --showduplicates | sort -r
- 安装指定版本
yum install docker-ce-26.0.0-1.el7
- 配置开机启动项
systemctl start docker
systemctl enable docker
docker version
1.2 使用docker安装gitlab
- 添加docker容器
docker run --detach \
--hostname 192.168.158.3 \
--publish 443:443 --publish 80:80 \
--name gitlab \
--restart always \
--volume $GITLAB_HOME/config:/etc/gitlab \
--volume $GITLAB_HOME/logs:/var/log/gitlab:z \
--volume $GITLAB_HOME/data:/var/opt/gitlab:z \
--shm-size 256m \
registry.gitlab.cn/omnibus/gitlab-jh:latest
- 启动容器
docker start gitlab
- 查看已存在的容器
docker ps -a
- 进入容器
docker exec -it gitlab /bin/bash
-
访问gitlab地址(需要等一会):192.168.158.3
-
管理员账号登录
- 用户名:root
- 密码存在下面文件中(进入容器中),登录后需要改密码不然24h之后会失效
cat /etc/gitlab/initial_root_password
- 访问成功!
1.3 使用gitlab新建项目
2. 搭建Jenkins(使用war包)
2.1 安装Jenkins
- 地址:https://www.jenkins.io/
- 版本:2.346.3 war包 https://get.jenkins.io/war-stable/2.346.3/
- 一定要注意Jenkins版本所要求的JDK版本!!!
- 可使用docker安装jenkins:https://zhuanlan.zhihu.com/p/663175903
2.2 安装jdk&jre
(1)安装JRE
- 检索可用包
yum search java|grep jdk
- 安装
yum install -y java-1.8.0-openjdk
(2)安装JDK
yum install -y java-devel
2.3 安装Maven
- 地址:https://maven.apache.org/download.cgi
- 版本:最新版.tar.gz
- 路径(需要JDK)
- 压缩包路径:/root/apache-maven-3.9.6-bin.tar.gz
- 文件路径:/usr/local/maven
- **修改setteins文件(阿里云镜像、本地仓库地址) ** 重要!!!
- 上面一条可参考:https://blog.csdn.net/BThinker/article/details/124265149
2.4 启动Jenkins
- 启动命令(默认端口8080):
java -jar jenkins.war
- 指定端口启动:
java -jar jenkins.war --httpPort=8081
...
2024-03-24 04:00:26.520+0000 [id=28] INFO jenkins.install.SetupWizard#init:
*************************************************************
*************************************************************
*************************************************************
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
8c32c4f9c96640e7ac75f25f4cd8f930
This may also be found at: /root/.jenkins/secrets/initialAdminPassword
*************************************************************
*************************************************************
*************************************************************
2024-03-24 04:01:09.985+0000 [id=28] INFO jenkins.InitReactorRunner$1#onAttained: Completed initialization
2024-03-24 04:01:10.073+0000 [id=22] INFO hudson.lifecycle.Lifecycle#onReady: Jenkins is fully up and running
2024-03-24 04:01:11.502+0000 [id=57] INFO h.m.DownloadService$Downloadable#load: Obtained the updated data file for hudson.tasks.Maven.MavenInstaller
2024-03-24 04:01:11.505+0000 [id=57] INFO hudson.util.Retrier#start: Performed the action check updates server successfully at the attempt #1
2024-03-24 04:01:11.520+0000 [id=57] INFO hudson.model.AsyncPeriodicWork#lambda$doRun$1: Finished Download metadata. 46,931 ms
-
访问地址:http://192.168.158.4:8080/
-
开启8080端口
- 查询端口是否开放 firewall-cmd --query-port=8080/tcp
- 开放8080端口 firewall-cmd --permanent --add-port=8080/tcp
- 重启防火墙(修改配置后要重启防火墙) firewall-cmd --reload
-
启动成功!
-
过一会后,点击【安装推荐的插件】并设置Jenkins用户信息
2.5 安装插件
-
maven integration、git
-
一堆报错,原因:Jenkins安装的时候默认安装的都是最新版本Jenins所兼容的插件,而不是你当前所使用Jenkins版本兼容的插件,因此会出现不兼容的情况.
2.6 Jenkins与JDK不兼容(重要)
- 找到当前版本对应的镜像源,地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/
- 在 Jenkins 插件管理中配置镜像源地址。提交。重启Jenkins。
- 可选插件 —> 立即获取 (这个步骤很关键,不然后面依然报错,都是教训!)
- 搜索 maven integration —> install without restart
3. 使用Jenkins发布
- 新建一个任务,选择【构建一个maven项目】
- 配置git相关信息
出现无法连接仓库,需要在服务器上安装一下git
yum install git
- 指定分支:/test
- Build
- 配置maven,MAVEN_HOME和服务器路径对应
2. 配置父pom路径,与实际项目保持一致
- 首次构建项目
在构建执行状态中可以看见正在执行,点进去可以查看控制台
首次构建失败原因:
[INFO] Compiling 2 source files with javac [debug target 1.8] to target/classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
[INFO] 1 error
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:08 min
[INFO] Finished at: 2024-03-24T20:34:23+08:00
[INFO] ------------------------------------------------------------------------
Waiting for Jenkins to finish collecting data
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.11.0:compile (default-compile) on project test: Compilation failure
[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[JENKINS] Archiving /root/.jenkins/workspace/study-jenkins/test/test/pom.xml to org.example/test/1.0-SNAPSHOT/test-1.0-SNAPSHOT.pom
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
channel stopped
Finished: FAILURE
需要安装JDK!参考本文档2.2章节
- 再次构建,构建成功!
-
找到/root/.jenkins/workspace/study-jenkins/test/test/target/test-1.0-SNAPSHOT.jar
-
启动jar包,记住开放8088端口
java -jar test-1.0-SNAPSHOT.jar --server.port=8088
- 访问成功!192.168.158.4:8088/common
- 自动启动jar
使用nohup java -jar启动jar包时失效:https://blog.joshua317.com/article/265
根据上面链接中的解决方案:
BUILD_ID=studyJenkins
nohup java -jar /root/.jenkins/workspace/study-jenkins/test/test/target/test-1.0-SNAPSHOT.jar --server.port=8088 > /usr/local/nohup.out 2>&1 &
说明:
>覆盖写
>>追加写
标准输入(stdin):代码为0,使用<或<<
标准输出(stdout):代码为1,使用>或>>
标准错误输出(stderr):代码为2,使用2>或2>>
2>&1含义详解可参考:https://blog.csdn.net/m0_45406092/article/details/113586005
可以在服务器上面查看启动日志:
cat nohup.out # 显示整个文件
tail -f nohup.out # -f 不停地去读最新的内容,用Ctrl+c来终止! -10 查看后10行
- 构建前清理脚本开发**(重要)**
- 脚本如下:
#!/bin/bash
#1.获取传入的参数
appname=$1
echo "arg: $1"
#2.获取正在运行的jar包pid
pid=`ps -ef | grep $1 | grep 'java -jar' | awk '{printf $2}'`
echo "pid: $pid"
#3.清理历史jar目录
rm -rf /root/.jenkins/workspace/study-jenkins
#4.关闭pid
if [ -z $pid ];
then
echo "$appname not started."
else
kill -9 $pid
echo "$appname stoping..."
#5.检查pid是否已关闭
check=`ps -ef | grep -w $pid | grep java`
if [ -z $check ];
then
echo "$appname pid: $pid is stop."
else
echo "$appname stop failed."
fi
fi
- 在目标服务器新建脚本文件:
[root@localhost local]# ls
bin etc games include lib lib64 libexec maven nohup.out sbin share src study.sh
[root@localhost local]# pwd
/usr/local
[root@localhost local]# cat study.sh
#!/bin/bash
#1.获取传入的参数
appname=$1
echo "arg: $1"
...
- 修改文件权限
chmod 777 study.sh
- 在jenkins上面配置Pre Steps
- 接下来,可以体验日常开发模式。
develop分支提交代码 —> 合并到test分支 —> Jenkins发版!
4. 几种构建方式
- 快照依赖构建/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-WebHook触发时构建本job
- 定时检查代码变更/Poll SCM
- 使用cron表达式定时检查代码变更,变更后构建本job
5. Docker镜像运行jar包
- 准备一台有docker环境的服务器
- 准备支持jdk的镜像
- 把jar包打包到容器内
- 编写dockerfile:
FROM openjdk:11
EXPOSE 8080
WORKDIR /root
ADD jarfile/test*.jar /root/app.jar
ENTRYPOINT ["java", "-jar", "/root/app.jar"]
- 打包镜像:
docker build -t test .
- 配置国内Docker镜像源
修改/etc/docker/daemon.json
文件,没有的话创建一个
写入
{
"registry-mirrors": [
"https://dockerproxy.com",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://ccr.ccs.tencentyun.com"
]
}
- 重启docker,让配置生效
systemctl restart docker
- 检查配置是否生效
docker info
输出结果中显示 Registry Mirrors
为配置文件配置内容,说明配置成功
- 创建容器(运行镜像)
docker run -d --name demp -p 8080:8080 test
5.1 自动化部署到Docker容器中
大致步骤:
- 清理:dockerfile、jar
停止容器、删除容器、删除镜像
docker stop test
docker rm test
docker rmi test
- 构建镜像
- docker外挂目录
docker run -d -p 8080:8080 --name demo-out-v /root/jarfile/test-1.jar:/app.jar openjdk:11 java -jar app.jar
- 自动化部署构建Docker镜像运行jar
emctl restart docker
- 检查配置是否生效
```shell
docker info
输出结果中显示 Registry Mirrors
为配置文件配置内容,说明配置成功
- 创建容器(运行镜像)
docker run -d --name demp -p 8080:8080 test
5.1 自动化部署到Docker容器中
大致步骤:
- 清理:dockerfile、jar
停止容器、删除容器、删除镜像
docker stop test
docker rm test
docker rmi test
- 构建镜像
- docker外挂目录
docker run -d -p 8080:8080 --name demo-out-v /root/jarfile/test-1.jar:/app.jar openjdk:11 java -jar app.jar
- 自动化部署构建Docker镜像运行jar