说在前面:
1.这样的模式适合容器编排,构造多个replica实例的进行容器编排的时候
2.纯手动踩坑
1.准备工作
一个后端springboot项目
一台Debian的Linux
代码托管用的github (可以自建gitlab)
2.安装jenkins的环境
这边建议在linux上安装一个java环境和maven环境,如果是配置springboot项目的话
因为jenkins自动构建的时候,可以用系统默认的(有可能会出问题),也可以选择虚拟机自带的
下面两步,熟练的可以自行跳过:
2.1 jdk8
提取码:7mj3
2.2 maven
maven 3.9.0版本
wwcz.lanzout.com/iQc0P0o25oe…
密码:eba8
配置阿里云maven仓库地址啥的相信大家都会
2.3 配置git
拉取代码需要我们有git环境(记得把linux的ssh公钥添加到代码仓库)
sudo apt install git
验证git是否安装成功 git --version
看到git版本信息,说明git安装成功
Git初始化设置,设置用户名he邮箱地址: git config --global user.name "ge-heima" git config --global user.email "754263923@qq.com"
可以查看设置的信息 git config --list
下一步,生成授权证书 温馨提示: git的认证授权,是基于公钥私钥的证书体系,因此,需要授权证书来保证测试应用服务器和git server之间的正常的认证授信。
在命令行中输入生成证书的语句: ssh-keygen -t rsa -C "754263923@qq.com"
2.4 jenkins
jenkins是拿java开发的
这里有个坑,jenkins从2022.06.28之后的版本都是jdk11进行安装,但是我的示例项目是jdk11
需要jdk8的jenkins:
安装:
nohup java -jar jenkins.war --httpPort=8888 &
lsof -i:8888
tail -f nohup.out
之后就跟着页面走就行了,插件也选默认安装的。
3.构建pipeline
进去之后有一些报错,这个和我们没关系,不用管它。
下面的每一步,建议都做一步测试一步
3.1 新建pipeline
流水线就是我们写脚本的地方
整体脚本:
node {
def mvnHome
stage('Git Pull') { // for display purposes
git 'git@github.com:Ht12137/Metric-Box-backend.git'
}
stage('Maven Build') {
sh "mvn clean package -DskipTests"
}
stage('Build Image') {
sh "/root/.jenkins/workspace/scripts/Metric-Box-backend_deploy.sh"
}
stage('Run Image') {
sh "/root/.jenkins/workspace/scripts/mbb-run.sh"
}
}
3.2 拉取代码
这里没有权限是没办法拉取的,注意检查是否有权限
stage('Git Pull') { // for display purposes
git 'git@github.com:Ht12137/Metric-Box-backend.git'
}
这里的代码会拉取到/root/.jenkins/workspace
下面
3.3 打包
可以跳过测试
stage('Maven Build') {
sh "mvn clean package -DskipTests"
}
3.4 制作镜像
这里是可以用不同的镜像仓库,比如阿里云的,实测大概1min多一点拉取一个镜像
(但是本地的话基本只要1s)
stage('Build Image') {
sh "/root/.jenkins/workspace/scripts/Metric-Box-backend_deploy.sh"
}
在workspace下面建一个scripts
这些都是正常的脚本,不过现在由jenkins帮你做
Metric-Box-backend_deploy.sh
:
记得要改成自己的项目名字
cd ../springboot
cat <<EOF > Dockerfile
FROM openjdk:8-jre-alpine
COPY target/mb-1.0.0.jar mb.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "mb.har"]
EOF
echo "Dockerfile created successfully"
docker build -t mb .
EOF就是end of file,可以当做是一个读取终止的地方
3.5 运行容器
由于我是jenkins和服务在一台机器上,所以就很方便,如果用docker swarm和k8s等等的容器编排的话,也是非常方便的
stage('Run Image') {
sh "/root/.jenkins/workspace/scripts/mbb-run.sh"
}
mbb.sh
:
docker kill mb
docker rm mb
docker run -d -it -p 8880:8880 --name mb mb
3.6 前端部署流程
需要在服务器安装yarn或者npm对应的环境
然后比较坑的是,jenkins自动去执行脚本的时候可能会yarn not found
啥的,这个可以
1.先打印服务器的环境变量
cat $PATH
2.然后
加入环境变量就可以了
3.7 运行效果图
4.配置github的Hook
到上面,我们就基本成功了。
但是还是半自动的,提交了代码之后还需要我们去手动的启动jenkins
许多代码仓库都有Hook功能,可以自动触发一些事件
当我在网上博客之间迷茫的时候,一位大佬责怪我说为啥不去看官方文档?------有道理
官网: plugins.jenkins.io/github/
根据官网有以下的步骤:
4.1 验证jenkins
选择添加凭据
这里需要添加一个密钥
密钥获取方式:
进入github –> setting –> Personal Access Token –> Generate new token
可以测试连通性,如图则成功
4.2 设置hook
会有个hook的地址
在github里填写就是当这个仓库这个分支有变化的话,就触发这个地址的钩子
进入GitHub上指定的项目 –> setting –> WebHooks&Services –> add webhook –> 输入刚刚部署jenkins的服务器的IP
5.最终效果
6 后续的进阶
云原生、k8s等等的自动化部署也在路上了,有兴趣的掘友可以点波关注