《Gitlab持续集成Runner的安装与配置》
《Gitlab持续集成详细配置与工作原理》
《为Gitlab持续集成打造一个部署用的docker》
《Gitlab持续集成「springboot篇」》
《Gitlab持续集成「PHP篇」》
《Gitlab持续集成「VUE篇」》
java、vue等项目需要编译,所以,至少有两个job,一个是用 maven镜像打jar包,一个是发布到对应位置。
发布节点用到的镜像centos7-sshpass:1.0.0详见 《为Gitlab持续集成打造一个部署用的docker》
案例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
   | # 定义了两个流程 stages:   - prepare   - deploy
  prepare:    # job的名称,可以随便起   stage: prepare    #这里要跟 stages 里面定义的保持一致   image: 'maven:3.6.3-openjdk-8'    #用哪个镜像   cache:    # 缓存     policy: pull-push   #缓存方式 有 pull push pull-push     key: ${CI_COMMIT_REF_SLUG}  #按照分支进行缓冲     paths:       - target/     #把target目录缓冲下来给下一步用   script:   #执行脚本     - mvn -v && java -version     - mvn clean install   tags:     - java01    #对应的Runner的TAG,多个runner可以用同样的tag,到时候gitlab来分配具体用哪个runner来执行   only:     changes:    此步骤(job)通过文件修改来触发,下面定义的意思是,这两个文件其中一个有修改即触发执行       - dev_ver       - test_ver
 
  deploy_dev:     #往dev版发布   stage: deploy     #这里要跟 stages 里面定义的保持一致   image: 'centos7-sshpass:1.0.0'   cache:     policy: pull  #只读不写     key: ${CI_COMMIT_REF_SLUG}  #按照分支进行缓冲     paths:       - target/   script:     - ls ./target/     # 拷贝jar包     - sshpass -p abcd scp -o StrictHostKeyChecking=no -P 1234 target/demo-0.0.1-SNAPSHOT.jar root@localhost:/app/demo-0.0.1-SNAPSHOT.jar     # 运行脚本     - sshpass -p abcd ssh -p 1234 root@localhost "/app/jenkins_restart.sh demo-0.0.1-SNAPSHOT >> /app/jenkins_restart.log"   tags:     - java01   only:     changes:    #这里仅针对dev_ver的修改触发       - dev_ver     
  deploy_test:    #往test版发包   stage: deploy   image: 'centos7-sshpass:1.0.0'   cache:     policy: pull  #只读不写     key: ${CI_COMMIT_REF_SLUG}  #按照分支进行缓冲     paths:       - target/   script:     - 。。。。。。   tags:     - java01   only:     changes:       - test_ver    #仅 文件 test_ver修改时候触发
   | 
 
以上这个案例,定义了两个环节 prepare和deploy,有三个job:
prepare: 在dev_ver或test_ver被修改时会被触发 
deploy_dev: 在dev_ver被修改时会被触发 
deploy_test: 在test_ver被修改时会被触发 
那么,如果:
- 项目根目录下的 
dev_ver被修改,则会触发 prepare: 和 deploy_dev: 
- 项目根目录下的 
test_ver被修改,则会触发 prepare: 和 deploy_test: