一個簡單的 SpringBoot 專案的 Dockfile 和 cicd 檔案配置

zhoudian發表於2020-06-24

第一次發帖,分享一個我遇到的問題吧
最近有用 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 就可以自動打映象並上傳到倉庫了

相關文章