Jenkins使用git和maven编写流水线

1、写git流水线

初识流水线。从git上拉取代码到虚拟机。

【第一步:创建一个新的流水线】

【第二步:定义名字】

点击下方ok!

【第三步:添加代码描述】

【第四步:编写流水线代码,如果忘记了,参照第五步】

【第五步:自动生成流水线代码--写入第四步中】

#上面的操作生成出来的代码:

node {

git branch: 'develop', credentialsId: '9a19cd80-bb02-4e8b-b126-f023bdebea7b', url: 'https://gitee.com/wztsl/dz12-demo01.git'

}

【第六步:保存流水线代码】

【第七步:测试流水线代码是否有错】

【第八步:查看代码】

2、写maven流水线

目的:拉取最新代码,将代码打包好,做成镜像,上传到docker中,然后启动容器,外部可以访问。

  • 通过git拉取代码

  • 用Dockerfile检查是否存在容器和镜像,如果存在则删除

  • 编译,打包

  • 创建docker镜像

  • 启动docker容器

    第一段流水线:git拉取代码

【一步一步测试流水线代码:】

node {

stage('pull code'){

git credentialsId: '8bea9def-ba4d-433c-a4b3-14c26be75f1b', url: 'https://gitee.com/mayang3366/jenkins-demo1.git'

}

}

【然后一步一步run测试结果:】

2.第二段流水线:将下载的项目进行打包

node {

stage('compile'){

#jenkinsDemo1的名字一定要是虚拟机里 /var/lib/jenkins/workspace 路径下存在的。该流水线的目的在于打包该项目。

dir('/var/lib/jenkins/workspace/jenkinsDemo1'){

sh 'mvn clean install'

}

}

}

3.第三段流水线:将打包后的项目做成docker镜像

【以上操作,完成第二段流水线就可以实现】

【注意:停掉服务后,删除掉workspace目录下的该项目,希望通过流水线来实现效果。】

【流水线代码如下:】

checkout=0

node {

stage('pull code'){

git credentialsId: '8bea9def-ba4d-433c-a4b3-14c26be75f1b', url: 'https://gitee.com/mayang3366/jenkins-demo1.git'

}

stage('compile'){

dir('/var/lib/jenkins/workspace/jenkinsDemo1'){

sh 'mvn clean install'

}

}

stage('make docker container'){

dir('/var/lib/jenkins/workspace/jenkinsDemo1/target'){

sh "echo FROM openjdk:8 > Dockerfile"

sh "echo ADD testNginx-1.0-SNAPSHOT.jar /app.jar >> Dockerfile"

sh "echo RUN bash -c '\"'touch /app.jar'\"' >> Dockerfile"

sh "echo ENTRYPOINT ['\"'java'\"','\"'-jar'\"','\"'/app.jar'\"'] >> Dockerfile"

sh "echo RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime >> Dockerfile"

sh "docker build -t jenkinsdemo1 ."

}

}

}

注意注意:docker build -t jenkinsdemo1 . 命令中的镜像名不能有大写字母。

#创建容器并运行,d1是容器名,

docker run --name d1 -p 8888:8888 -d jenkinsdemo1

4.第四段流水线:通过镜像创建容器并启动

checkout=0

node {

stage('pull code'){

git credentialsId: '8bea9def-ba4d-433c-a4b3-14c26be75f1b', url: 'https://gitee.com/mayang3366/jenkins-demo1.git'

}

stage('check docker container'){

if(fileExists('/var/lib/jenkins/workspace/jenkinsDemo1/target/Dockerfile')){

sh 'docker stop d1'

sh 'docker rm d1'

sh 'docker rmi jenkinsdemo1'

}

}

stage('compile'){

dir('/var/lib/jenkins/workspace/jenkinsDemo1'){

sh 'mvn clean install'

}

}

stage('make docker container'){

dir('/var/lib/jenkins/workspace/jenkinsDemo1/target'){

sh "echo FROM openjdk:8 > Dockerfile"

sh "echo ADD testNginx-1.0-SNAPSHOT.jar /app.jar >> Dockerfile"

sh "echo RUN bash -c '\"'touch /app.jar'\"' >> Dockerfile"

sh "echo ENTRYPOINT ['\"'java'\"','\"'-jar'\"','\"'/app.jar'\"'] >> Dockerfile"

sh "echo RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime >> Dockerfile"

sh "docker build -t jenkinsdemo1 ."

}

}

stage('start'){

sh 'docker run --name d1 -p 8888:8888 -d jenkinsdemo1'

}

}

注意:/var/lib/jenkins/workspace/jenkinsDemo1 "jenkinsDemo1"是项目名,可以有大写字母

docker rmi jenkinsdemo1 jenkinsdemo1 是镜像名,不可以有大写字母

node:节点,Jenkins支持分布式,可以给节点命名,master是主节点,不要修改。

stage:声明步骤

fileExists:判断文件是否存在

dir:进入某个目录

5.第五段流水线:删除已存在的容器和镜像

checkout是用于判断是否存在镜像和容器的标识,上面的流水线中并未操作它,不声明也不会报错。但是,如果在mvn install时报错,会导致流水线不继续运行,就不会生成Dockerfile文件,那么再次执行流水线时,还是会因为已经有了d1这个容器而启动报错。

研究用什么办法解决这个问题?

1.手动操作解决方式

2.流水线代码解决方式

checkout=0

node {

stage('pull code'){

git credentialsId: '8bea9def-ba4d-433c-a4b3-14c26be75f1b', url: 'https://gitee.com/mayang3366/jenkins-demo1.git'

}

stage('check docker container'){

script{

checkout=sh(

script: 'docker ps | grep d1',

returnStatus: true

)

}

}

stage('compile'){

dir('/var/lib/jenkins/workspace/jenkinsDemo1'){

sh 'mvn clean install'

}

}

stage('remove docker container'){

if(checkout==0){

sh 'docker stop d1'

sh 'docker rm d1'

sh 'docker rmi jenkinsdemo1'

}

}

stage('make docker container'){

dir('/var/lib/jenkins/workspace/jenkinsDemo1/target'){

sh "echo FROM openjdk:8 > Dockerfile"

sh "echo ADD testNginx-1.0-SNAPSHOT.jar /app.jar >> Dockerfile"

sh "echo RUN bash -c '\"'touch /app.jar'\"' >> Dockerfile"

sh "echo ENTRYPOINT ['\"'java'\"','\"'-jar'\"','\"'/app.jar'\"'] >> Dockerfile"

sh "echo RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime >> Dockerfile"

sh "docker build -t jenkinsdemo1 ."

}

}

stage('start'){

sh 'docker run --name d1 -p 8888:8888 -d jenkinsdemo1'

}

}

说明:

git拉起代码:第一步

打包代码:第三步

把打包后的代码做成镜像:第五步

通过镜像创建容器并运行:第六步

检查是否有容器和镜像存在:第二步

删除已存在的容器和镜像:第四步

相关推荐
fruge4 小时前
git上传 项目 把node_modules也上传至仓库了,在文件.gitignore 中忽略node_modules 依然不行
大数据·git·elasticsearch
_OMG_5 小时前
Git 高效同步远程分支与本地分支清理技巧
git
心无旁骛~5 小时前
Git笔记汇总,持续更新~
笔记·git
web150854159358 小时前
Spring Boot(十六):使用 Jenkins 部署 Spring Boot
spring boot·后端·jenkins
m0_748255028 小时前
Springboot中使用Elasticsearch(部署+使用+讲解 最完整)
spring boot·elasticsearch·jenkins
[奋斗不止]8 小时前
Jenkins 视图(View)
jenkins·jenkins视图view·jenkins 视图view
Karoku0668 小时前
【CI/CD】Jenkinsfile管理+参数化构建+邮件通知以及Jenkins + SonarQube 代码审查
运维·ci/cd·容器·kubernetes·jenkins·rancher
{⌐■_■}14 小时前
【git】工作场景下的 工作区 <-> 暂存区<-> 本地仓库 命令实战 具体案例
大数据·git·elasticsearch·golang·iphone·ip·etcd
李狗蛋儿啊16 小时前
zero自动化框架搭建---Git安装详解
运维·git·自动化
CarryBest17 小时前
Jenkins 环境搭建---基于 Docker
运维·jenkins