gitlab-runner实现gitlab上的代码自动打包发布——windows版
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