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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章