一、前言
前面我用docker 部署了gitlab 和 gitlab-runner。然后这一篇,我们就要通过gitlab 和gitlab-runner 来实现CI/CD代码自动化部署流程。
大致流程就是,往分支发布代码,yml文件里配置不同分支执行不通脚本。
二、编写yml 文件
首先,我们在我们的项目代码里,写一个 .gitlab-ci.yml 文件。别的大家可以自己查一下,我这里写了比较简单的。内容如下:
stages: # 定义pipeline的全部阶段(stage) - develop # 阶段名,自己定义 - main test_branch: # 作业名称,自己定义 stage: develop # 阶段名,对应stages里的阶段名 only: # 定义分支,并为该分支单独创建工作 - develop script: # 执行脚本,可以自己写,这里只是看一下效果 - echo 'This is develop' master_branch: stage: main only: - main script: - echo 'This branch is main'
三、打开gitlab 上 Runner 的设置
Run untagged jobs 这行一定要勾上,因为runner和job匹配的规则是,runner的tag和项目的tag要相同,而我的项目里没有标注tag。所以,如果不把这个选项加上会导致,不触发runner。
四、测试
分别测试,更新不同分支代码,是否会执行不同脚本。gitlab-runner在执行脚本时,用的是系统上 gitlab-runner 这个用户去执行的,所以要注意权限问题。(切记)
我在gitlab上test项目中创建了两个分支,分别是develop(测试) 分支,main(主)分支。
1. 更新测试分支代码
在本地,往gitlab上推送更新的代码,然后上gitlab,在CI/CD 上我们可以看到pipeline有一次最近提交记录,分支为develop。点 Jobs可以看到 runner 脚本执行过程,从下面第三张截图上可以看到,它只执行了test_beanch工作让它执行的脚本。master_branch 这个作业的脚本没执行,因为这个作业指定的分支为mian,而mian分支没更新,所以没执行。
2. 更新main分支
那怎么让它执行master_branch作业的脚本呢,我们只要把develop分支合并到main分支,main分支上的代码更新后,它就会执行了。
我们更新了develop分支后,gitlab会问你,要不要创建合并请求。然后我们点创建合并请求。然后同意就好了,详细的就不说了,直接看结果。
我们可以看到它输出的是:This branch is main 。