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拉起代码:第一步

打包代码:第三步

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

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

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

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

相关推荐
Slow菜鸟3 分钟前
Git Worktree 使用教程
大数据·git·elasticsearch
二月夜6 分钟前
Maven 常用命令完整版速查表
java·maven
Warren9829 分钟前
Windows 本地安装 Jenkins 教程
linux·运维·windows·功能测试·mysql·jenkins
阿民不加班15 小时前
【Git】git拉取远端但是本地存在不想提交文件处理
git
Selina K16 小时前
在windows安装git
git
暗暗别做白日梦21 小时前
Maven与Spring Cloud SpringBoot核心配置文件解析
spring cloud·maven
李少兄1 天前
Windows 安装 Maven 详细教程(含镜像与本地仓库配置)
java·windows·maven
周杰伦fans1 天前
如何将 Feature 分支同步到 Master 主分支:一次完整的 Git 合并实战
git
jiayi_19991 天前
git创建new branch
git
__Witheart__1 天前
通过交互式 Rebase 合并部分提交到远程分支的操作步骤
git