Docker 一个简单的 SpringBoot 项目的 Dockfile 和 cicd 文件配置

zhoudian · 2020年06月24日 · 最后由 dive 回复于 2020年06月28日 · 2500 次阅读

第一次发帖,分享一个我遇到的问题吧
最近有用 springBoot 写一个测试平台的后端服务,感觉以后容器部署会是主流吧,所以抛弃 Jenkins 部署到虚拟机的方式,改使用 Gitlab 自带的 cicd 来打镜像包

Dockerfile 很简单,就是将项目 jar 上传启动就行,里面的仓库名称和路径已隐去

FROM xxx.xx.com/images/xxx:centos7.3-openjdk1.8
RUN mkdir -p /home/app
WORKDIR /home/app
COPY target/test-project-0.0.1-SNAPSHOT.jar /home/app/
EXPOSE 80
ENTRYPOINT ["java", "-jar","/home/app/test-project-0.0.1-SNAPSHOT.jar"]

然后就是.gitlab-ci.yml 文件了,这里分了两步,一步是 mvn 打包,第二步就是打 Docker 镜像并上传到仓库
stages:

  • package
  • build

package:
stage: package
image: xxx.xxx.com/xxx/ci:maven-jdk-image
script:
- mvn -U clean package -Dmaven.test.skip=true
only:
- tags
artifacts:
expire_in: 1 day
paths:
- target/test-project-0.0.1-SNAPSHOT.jar

docker-build:
stage: build
script:
- docker login xxx.xxx.com -u $HUBUSER -p $HUBPASS
- docker build . -t xxx.xxx.com/test/xxx-project:$CI_COMMIT_TAG
- docker push xxx.xxx.com/test/xxx-project:$CI_COMMIT_TAG
only:
- tags

然后我遇到啥问题呢,就是第一个 job 执行了以后会把 jar 包打出来,但是第二个 job 执行的时候执行 Dockerfile 总是提示没有 jar,然后看日志才发现执行 job 前会清理 target 目录,网上查了好久资料以后才知道加 paths 以后就可以把前一个 job 的文件传递到后一个 job
paths:
- target/test-project-0.0.1-SNAPSHOT.jar

以后每次只需要打一个 tag 就可以自动打镜像并上传到仓库了

共收到 1 条回复 时间 点赞

建议 Markdown 排版下

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册