gitlab中的項目,每次打包發佈都比較麻煩,需要自己本地打包然後傳輸到服務器,再啓動。考慮實現一種自動打包發佈的方法。
1)考慮使用jenkins實現,但是需要jdk11(當前環境不能升級),還有一些插件(這個雖然可以離線安裝,但是需要高版本的jenkins,相對應的又依賴高版本的jdk)
2)考慮使用docker實現,不熟。。。
3)所以最後考慮使用gitlab-runner了,相對簡單
前提:
1、本地安裝了maven、git、gitlab-runner、java8
2、有一個gitlab網址,其中有自己的項目
以下爲實現步驟:
一、windows安裝gitlab-runner
1、 先去gitlab官網下載windows版本的gitlab Install GitLab Runner on Windows | GitLab
2、安裝gitlab-runner
//安裝gitlab-runner gitlab-runner.exe install //使用指定賬戶安裝gitlab-runner gitlab-runner.exe install --user your-username --password your-password //啓動gitlab-runner gitlab-runner.exe start //停止gitlab-runner gitlab-runner.exe stop
二、把gitlab-runner註冊到gitlab上
註冊成功後,Runners下面會生成一個runners,可以看到這個runners是正常運行的,沒有什麼錯誤。
CI/CD裏面生成了runners後,相應的在gitlab-runner的config.toml文件裏面也會生成一個新的[[runners]],對新生成的[[runners]]的配置信息做一些修改。
pre_clone_script = "chcp 65001"
pre_build_script = "chcp 65001"
shell = "powershell"
.\gitlab-runner.exe restart 重啓一下以免修改的配置不生效!
三、在Maven項目中新增.gitlab-ci.yml文件【事先要有一個已經發布到gitlab上的項目(gitlab使用網上的或者自己安裝一個都行)】
由於我的項目代碼是微服務形式,一個項目中有多個子項目,所以需要打的包也不止一個,因此要使用父級.gitlab-ci.yml調用子級.gitlab-ci.yml 【如果只有一個項目(一個pom文件)那使用一個.gitlab-ci.yml文件就可以了】 ,此外,.gitlab-ci.yml和src及pom.xml同級。
我的目錄結構類似於下圖:
父級.gitlab-ci.yml內容:
stages: # 指定運行的步驟,沒有指定就順序執行
- build
- test
- build_test1
- build_test2
build1:
tags:
- k8s
stage: build
script:
- echo "Do your build here"
test1:
stage: test
script:
- echo "Do a test here"
- echo "For example run a test suite"
build-test1:
stage: build
trigger:
include: # 運行 test1 目錄下的 ci.yml 文件
- local: test1/ci.yml # 相對路徑
strategy: depend # 狀態同步
rules: # 觸發規則,test1 目錄下的任何文件改變時觸發
- changes:
- test1/* # test1 下的任何文件發生改變就執行
when: always
build-test2:
stage: build
trigger:
include: # 運行 test2 目錄下的 ci.yml 文件
- local: test2/ci.yml # 相對路徑
strategy: depend # 狀態同步
rules: # 觸發規則,test2 目錄下的任何文件改變時觸發
- changes:
- test2/* # test2 下的任何文件發生改變就執行
when: always
子級.gitlab-ci.yml內容:【 only: - mydev 這個是設置對應的分支,你提交代碼到其他分支不會觸發的】
stages: # 指定運行的步驟,沒有指定就順序執行
- build
- deploy
- test
- package
build1:
tags:
- k8s
only:
- mydev
stage: build script: - echo "Do your build here" test1: tags: - k8s
only:
- mydev
stage: test script: - echo "Do a test here" - echo "For example run a test suite" package: tags: - k8s
only:
- mydev
stage: package
script:
- echo "開始打包"
- echo "For example run a lint test"
- cd D:\xxx\xxx\myprojectbasepath
- D:\xxx\apache-maven\bin\mvn compile
deploy1:
tags:
- k8s
only:
- mydev
stage: deploy script: - echo "Do your deploy here"
把以上文件推送到對應分支。
四、在對應的分支,和對應的子項目中,修改文件然後提交再push到對應分支,登錄到gitlab查看是否成功
至此已完成一個子項目的打包,其他子項目亦復如是。
後續會嘗試在linux環境實現(一般部署服務都是使用linux機器)
參考:
https://blog.csdn.net/weixin_42032770/article/details/128998760
https://blog.51cto.com/busy/6237260