第一次发帖,分享一个我遇到的问题吧
最近有用 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:
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 就可以自动打镜像并上传到仓库了


↙↙↙阅读原文可查看相关链接,并与作者交流