运用dockerfile及Jenkinsfile实现打包镜像部署容器
Dockerfile文件如下
#使用的基础镜像
FROM java:8
COPY ./target/*.jar /app.jar
CMD ["--server.port=8080"]
ENTRYPOINT ["java","-jar","/app.jar"]
COPY ./target/*.jar /app.jar 因为Jenkins的操作目录就是当前项目的工作目录,而我们生成的jar就在target目录下
所以这里主要是将jar包拷贝到容器中并重命名为app.jar
修改Jenkinsfile如下所示
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'mvn clean install -DskipTests'
// 利用dockerfile生成容器镜像,dockerfile就在当前项目根目录下
sh 'sudo docker build -t hello:latest .'
}
}
stage('PushImage') {
steps {
// 一定要加端口号
//打tag
sh 'sudo docker tag hello:latest 47.115.1.158:80/harbor/hello:latest'
//将镜像推送到harbor私有库
sh 'sudo docker push 47.115.1.158:80/harbor/hello:latest'
//删除本地的容器镜像
sh 'sudo docker rmi -f `docker images -q`'
}
}
stage('Deploy') {
steps {
sh 'sudo sh /opt/Start.sh'
}
}
}
}
Start.sh
#!/bin/bash
#这里使用的前提是通过ssh设置免密登录
ssh -tt root@8.135.143.103 << eeooff
sh Deploy.sh
exit
eeooff
echo done
Deploy.sh
#!/bin/bash
# docker ps -a| grep hello | awk '{print $1}' 这里会找到hello字符串在的那行 并会找到以空格分隔的第一段字符串 也就是容器的id
if test -z "$(docker ps -a| grep hello | awk '{print $1}')"; then
echo "The result is empty."
else
# 停止容器
docker stop `docker ps -a| grep hello | awk '{print $1}' `
# 删除容器
docker rm `docker ps -a| grep hello | awk '{print $1}' `
# 删除容器镜像
docker rmi -f 47.115.1.158:80/harbor/hello:latest
fi
#获取容器镜像
docker pull 47.115.1.158:80/harbor/hello:latest
# 运行容器,这里给容器命名为hello
docker run -d -p 8080:8080 --name=hello 47.115.1.158:80/harbor/hello:latest
现在只需修改代码,提交便会触发管道实现Jenkins打包部署容器镜像服务。
如下图所示我将这里改为哈哈哈,然后提交代码到github
管道跑完后刷新项目地址
如图所示项目代码已经更新了
如图所示项目代码已经更新了