开发规范


CI/CD

<p>CI/CD 基本概念 gitlab-runner CI的job是由gitlab-runner去执行的,类似jenkins。runner不断轮训是否有需要进行的任务。</p> <p>CI脚本 ci脚本为项目根目录 .gitlab-ci.yml 文件 详情见文档</p> <p>示例: stages:</p> <ul> <li>build job 1: stage: build when: manual script: <ul> <li>mvn clean package</li> <li>dateTag=<code>date +"%Y%m%d%H%M"</code></li> <li>docker build -t hub.ecs.com:6999/app:$dateTag .</li> <li>docker push hub.ecs.com:6999/app:$dateTag 常用配置 stages: 最外层配置。构建步骤,不写时为下方的三步。</li> </ul></li> </ul> <p>stages:</p> <ul> <li>build</li> <li>test</li> <li>deploy 意思为, 并行执行所有步骤为 build 的任务 所有步骤为 build 的任务执行之后且全部成功时,开始并行执行步骤为 test 的任务 所有步骤为 test 的任务执行之后且全部成功时,开始并行执行步骤为 deploy 的任务 没有特殊情况时,任意步骤失败时,将不会执行后续步骤的任务</li> </ul> <p>备注: 特殊情况为任务中的 when 配置,会使任务可以在前置失败后执行</p> <p>job: 最外层配置。任务,名称可以自己定义,不可重复</p> <p>stage: 任务中的配置。该任务对应的步骤,必须为 stages 中已经定义好的步骤。不写时默认为 test 步骤</p> <p>script: 任务中的配置。任务的执行内容脚本,每个任务必须含有的配置。任务的其他配置均为可选项。 可能需要在脚本外层增加引号,强制转换成字符串,否则有些符号会产生yml的语法意义导致脚本出错。 尤其注意下列符号。</p> <p>:, {, }, [, ], ,, &amp;, *, #, ?, |, -, &lt;, &gt;, =, !, %, @, ` before_script 和 after_script 最外层配置。在每个任务执行前后均会执行的内容。</p> <p>新项目添加CI 目前可以使用的runner</p> <p>项目组公共的runner(找田仁飞配置) 自己注册的项目私有的runner(自己手动注册后可用) 在gitlab-runner中注册项目 运行命令 gitlab-runner register 根据提示输入 url、token、runner name、tag、runner type(type一般为shell) 回到项目中查看新增的runner,可能需要编辑钩选Run untagged jobs选项 备注:</p> <p>查看原有 gitlab-runner 的启动命令,如果有指定配置文件路径,注册时也需要指定相同的配置文件,否则会使用默认配置文件路径。注册后对应的配置文件会新增配置,确保该配置文件对应的runner已经启动,否则会显示没有连接 root用户启动的runner配置文件默认路径为 /etc/gitlab-runner/config.toml 非root用户启动的runner配置文件路径默认为 ~/.gitlab-runner/config.toml 目前在 132.46.110.79 上部署了gitlab-runner。也可以在其他主机额外部署 命令位置: /app/soft/gitlab/gitlab-runner register 目前的 workspace: /app/soft/gitlab-runner/workspaces 常见问题 注册runner用的信息以及runner在哪里查看 进入项目 -&gt; Settings -&gt; CI / CD expand 右侧 Runners 部分</p> <p>pipelines 的任务一直在 pending 可能原因:</p> <p>新增的 runner 没有钩选Run untagged jobs选项,导致无法执行没有在ci脚本中标记tag的任务。(解决方法:到项目中查看runner,编辑钩选Run untagged jobs选项) runner 轮训任务没有到该任务,或者所有 runner 都在运行,没有空闲的 runner。(解决方法:等到runner pick到你的任务就会开始执行了) 希望ci手动执行,而不是每次push后执行 在ci脚本对应的任务中添加when: manual,添加后,pipeline页面会出现手动执行的按钮</p>

页面列表

ITEM_HTML