一、什么是gitlabCI/CDGitlabCI/CD是GitLab内置的持续集成(CI)和持续交付(CD)工具。也就是说,在gitlab中创建项目,会自动具备CI/CD功能。这个功能可以用来做什么?其实,当我们将代码提交到远程仓库,对代码进行一些改动时,通过配置.gitlab-ci.yml文件,gitbal可以自动找到这个文件,并根据文件中的内容,做A系列任务,例如自动检测(代码lint)、构建和单元测试。作用是什么?有时提交的代码可能有一些错误。如果不进行此类检测,则后续提交将在之前的错误基础上进行。因此,该功能可以帮助开发者保证提交代码的质量,提前发现bug。2..gitlab-ci.yml文件的概念介绍,看似复杂,其实整个流程配置在一个文件中。在项目的根目录中创建一个名为.gitlab-ci.yml的文件。当我们提交代码时,gitlab-ci会根据这个文件中的配置进行相关操作。文件样例:image:node:14.17.0stages:-security_check-release_verify-update_beta-update_livesecurity_check_job:extends:.model-x-checkstage:security_checkvariables:CHECK_NO_ERROR:"true"release_verify:stage:release_verifyscript:|-result=`curl--requestPOST'http://deploy-platform.shopee.io/apis/release/v1/gitlab/merge_request/verify'--header'Content-Type:application/json'-d"{\"merge_request_id\":$CI_MERGE_REQUEST_IID,\"project_id\":$CI_PROJECT_ID}"`echo$result;回声$结果|grep'"pass":true'only:-merge_requestsupdate_beta_job:stage:update_betascript:-npmsetregistryhttps://npm.shopee.io/-yarninstall-node./fileA.js${CI_COMMIT_REF_NAME}${GIT_PUSH_TOKEN}${CI_COMMIT_MESSAGE}规则:-if:'$CI_COMMIT_REF_NAME=="master"&&$CI_PIPELINE_SOURCE=="web"'update_live_job:stage:update_livevariables:GIT_DEPTH:完整脚本:-npmsetregistryhttps://npm.shopee.io/-yarninstall-node./fileA.js${CI_COMMIT_REF_NAME}${GIT_PUSH_TOKEN}${CI_COMMIT_MESSAGE}规则:-if:'$CI_COMMIT_REF_NAME=="release"&&$CI_PIPELINE_SOURCE=="web"'文件中需要配置的配置涉及到几个概念:1.pipline管道每次推送到远程仓库的提交都是一个单独的管道2.一个管道在stage阶段是由多个stage组成的。默认情况下,如果前一阶段失败,则不会执行后续阶段。3.作业作业是一组最终将被执行的指令。一个作业将与一个阶段相关联,这意味着该作业将在该阶段执行。在作业中,它是定义将要运行的脚本脚本的地方。结合这三个概念,查看文件中的关键字:stages:定义一个pipline需要运行的stages。它们被写入的顺序就是它们将被执行的顺序。job:自定义作业的名称。对于每个作业,您需要配置以下内容:stage字段,将在哪个阶段执行。脚本字段是一系列执行的脚本命令。only/except/rules字段:决定是否创建并执行该作业。阶段和工作的定义非常简单。在job的定义下,需要注意script和rulesscript是一系列的自定义命令。在这个阶段的工作中,如果你想对代码做点什么,你可以在这里写成命令的形式,gitlab-ci就会执行。它可以是单行shell脚本命令。如果逻辑比较复杂,可以用node来执行一个文件。据官网介绍,rules是一种替代only/except的新方案。当规则下的if匹配时,将创建作业。在规则中,可以是如下形式的规则:例如,只有当提交的分支为xxx时才执行作业;只有在gitlabci页面上单击“运行管道”按钮时才会执行作业;在rules中,可以使用gitbal-ci的预定义变量获取提交的分支等一系列信息,并进行匹配工作。具体如何配置可以参考以下官网链接:选择何时运行job.gitlab-ci.yml文件相关预定义变量3.一些小技巧在项目运行过程中,master分支和release分支更重要。通常的操作是master分支会在合并多个需求后用于部署staging环境和进行测试。所有测试都已通过。当release正式发布时,master分支用于覆盖release分支,最后release分支上的代码用于发布release。所以为了保证最终的release是正确的,我们可以在master分支和release分支上有代码变更提交时,使用gitlab-ci工具做一些验证工作。预定义变量的有效使用:在作业定义中,我们可以使用ci预定义变量,比如例子中的CI_COMMIT_REF_NAME,来表示当前正在操作的项目的分支名称。参考:入门
