Jenkins凡是要指定路径的命令,一定要写绝对路径,不能写相对路径!不要以为配置了Remote directory,那么命令就会在Remote directory下执行!这种想法是错误的!!!
《jenkins自动化发布到服务器并自动运行》
第1种方法:使用外部Jar包完成自动化部署(简单方便),正式环境更新jar包时,备份一下旧的的jar包即可。
修改jenkins项目配置
Pre Steps 构建前清除旧的jar包,然后停止容器
rm -rf /jenkins/gitlabdemo/*
docker stop gitlabdemo
Post Steps构建启动容器
docker start gitlabdemo
先执行一次jenkins构建,会报ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [1]],这个错是因为我们没有相应的容器。这时候我们去部署服务器执行一次下面这条命令即可。
-v后面的jar包路径无法模糊匹配,所以修改版本号的时候,也要相应修改docker命令
docker run -d -p 9090:9090 --privileged=true --restart=always --name gitlabdemo -v /jenkins/gitlabdemo/gitlabdemo-1.jar:/gitlabdemo/gitlabdemo.jar openjdk:8-jre-alpine java -jar /gitlabdemo/gitlabdemo.jar
然后重新执行一次jenkins构建
第2种方法:Dockerfile打包成docker镜像(灵活),相对来说比较麻烦一点,而且占用存储空间比较多!
springboot项目根路径与pom.xml同级创建Dockerfile文件
#jdk版本
FROM openjdk:8-jre-alpine
#时区
ENV TZ=Asia/Shanghai
#JVM参数
ENV JAVA_OPTS="-Xms256m -Xmx256m"
#映射端口
EXPOSE 9090 9090
#指定工作文件夹,那么执行Dockerfile也要进入到这个文件夹执行,否则会报错
WORKDIR /jenkins/gitlabdemo
#把jar包放入镜像内
ADD gitlabdemo*.jar /gitlabdemo.jar
#启动参数
ENTRYPOINT ["nohup","java","-jar","/gitlabdemo.jar","&"]
推送到gitlab以后,回到jenkins
Pre Steps(构建前)
这个rm -rf一定要指定到具体的文件夹,否则会执行失败!不要以为上面指定了remote dir,就以为当前在remote dir下!这种想法是错误的!凡是需要到某个目录的均要指定绝对路径!!!
rm -rf /jenkins/gitlabdemo/*
docker stop gitlabdemo
docker rm -f gitlabdemo
docker rmi -f gitlabdemo
Post Steps(构建)
第1个Transfer Set
第2个Transfer Set
再次申明一次!不要以为配置了Remote directory,那么命令就会在Remote directory下执行!这种想法是错误的!!!
cd /jenkins/gitlabdemo && docker build -t gitlabdemo . && docker run -d -p 9090:9090 --name gitlabdemo gitlabdemo
关于:ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [1]]
这个错误就是你的命令有问题,即Exec command下写的命令有问题!首先排查执行命令时是否指定了文件的路径!如:sh a.sh。假设文件路径是/root/a.sh。这样执行就会有问题!因此应该写成sh /root/a.sh