手把手教你Jenkins自动CICD流程

4,289 阅读4分钟

说在前面:

1.这样的模式适合容器编排,构造多个replica实例的进行容器编排的时候

2.纯手动踩坑

1.准备工作

一个后端springboot项目

一台Debian的Linux

代码托管用的github (可以自建gitlab)

2.安装jenkins的环境

这边建议在linux上安装一个java环境和maven环境,如果是配置springboot项目的话

因为jenkins自动构建的时候,可以用系统默认的(有可能会出问题),也可以选择虚拟机自带的

下面两步,熟练的可以自行跳过:

2.1 jdk8

链接:pan.baidu.com/s/154LaIUdR…

提取码: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:

wwcz.lanzout.com/ipg7V0o291m…

安装:

nohup java -jar jenkins.war --httpPort=8888 & 
lsof -i:8888 
tail -f nohup.out

之后就跟着页面走就行了,插件也选默认安装的。

image-20230219223438547

3.构建pipeline

进去之后有一些报错,这个和我们没关系,不用管它。

image-20230219223359720

下面的每一步,建议都做一步测试一步

3.1 新建pipeline

image-20230219213918337

image-20230219214340568

流水线就是我们写脚本的地方 image-20230219214537538

整体脚本:

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.然后 image-20230220125742780

image-20230220125721289

加入环境变量就可以了

3.7 运行效果图

image-20230219220204994

image-20230219220256676

4.配置github的Hook

到上面,我们就基本成功了。

但是还是半自动的,提交了代码之后还需要我们去手动的启动jenkins

许多代码仓库都有Hook功能,可以自动触发一些事件

当我在网上博客之间迷茫的时候,一位大佬责怪我说为啥不去看官方文档?------有道理

官网: plugins.jenkins.io/github/

根据官网有以下的步骤:

4.1 验证jenkins

image-20230219220714078

image-20230219220815227 选择添加凭据

这里需要添加一个密钥

image-20230219220909690

密钥获取方式:

进入github –> setting –> Personal Access Token –> Generate new token image-20230219221450091

可以测试连通性,如图则成功

image-20230219221555810

4.2 设置hook

image-20230219221709831

image-20230219221755671

会有个hook的地址

在github里填写就是当这个仓库这个分支有变化的话,就触发这个地址的钩子

进入GitHub上指定的项目 –> setting –> WebHooks&Services –> add webhook –> 输入刚刚部署jenkins的服务器的IP image-20230219221913465

5.最终效果

image-20230219222258181

6 后续的进阶

云原生、k8s等等的自动化部署也在路上了,有兴趣的掘友可以点波关注 image-20230219222416782