Day07,搭配gitlab-ci执行image auto build

正文

今天要设定gitlab上的专案,让他们能够在git commit时自动打包成docker image并存放於gitlab registry。

目前gitlab上面都有提供许多shared runner,举凡像是一些无关紧要、无机敏性考量的内容,都可以直接透过官方提供的shared runner 来进行pipeline,这次的homelab也会使用这个shared runner 进行auto build的动作。

反之,如果是一些private repository,有机敏性考量、有对应网路环境限制(如地端自动化布署等等......),那就是透过sepcific runners於自己的机器中建置与维护专用的runner,符合当下环境的需求,且不用与陌生人竞争资源,安装与注册的流程上面&官网介绍的都算详细,看大家如何选择而已。

gitlab repository左边选单 Settings > CI/CD > 展开 Runners,从图片上我们可以看到许多shared runners,而runner下方许多蓝色的tag则是告知你该runner的使用情境/环境。

下图是官方所展示的gitlab runner execution flow

那如何触发runner运作呢?就是要搭配.gitlab-ci.yml,当该档案存在於gitlab repository且内容的撰写符合官方所规范的方式,就可以触发gitlab runner来工作啦。

那我这边就是简单的修改一下官方范本,撰写一份.gitlab-ci.yml 如下,使用的是docker in docker(dind)的方式:

docker-build:
  image: docker:latest
  stage: build
  services:
    - docker:dind
  before_script:
    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
  script:
    - |
      if [[ "$CI_COMMIT_BRANCH" == "master" ]]; then
        tag=":dev"
      else
        tag=":$CI_COMMIT_REF_NAME"
      fi
    - docker build -t "$CI_REGISTRY_IMAGE${tag}" .
    - docker push "$CI_REGISTRY_IMAGE${tag}"
  tags:
    - docker
  only:
    - master
    - /^Release-v[0-9]+(?:.[0-9]+)+$/

gitlab runner中其实预先定义了许多变数,与当下gitlab的使用者/repo/环境都息息相关,初学者不熟悉有哪些变数可以用的话不妨在runner中执行export将变数输出看一看,或是花点时间认真阅读官方文件看看有哪些是自己需要的。

.gitlab-ci.yml的内容可以搭配左边选单CI/CD > pipeline > 画面右上角CI Lint做检验。会告诉你语法是否正确,预计如何执行pipeline。

执行的过程,可以点选pipeline查看Console,那这边的逻辑就是master主线会将image打包成dev 而/^Release-v[0-9]+(?:.[0-9]+)+$/则是只要是这样的名字就将image如此打包,如下图所示。

那这样子我前几天写的两个应用都完成Auto Build罗,明天可以开始规划基础环境建设了。

闲聊

gitlab官方的免费仔,在使用gitlab CI时是有Quota限制的,每个月只能执行400分钟的pipeline(open source则不受限制),如果超过就需要升级会员或是购买额外时间(在user settings那边有详细的usage quotas可以参阅唷)。


<<:  Day7 SQL

>>:  Day 7 ( 入门 ) 按钮控制猫咪 ( 广播 )

Day 13 - Spread Operator & Rest Operator

在介绍 Spread Operator 和 Rest Operator 之前,先来介绍阵列相加的方法...

[Day 27] 中场休息 - 换边发球,heroku布署完整步骤

上一篇我们介绍完了aws如何一步一步把环境架起来 这一篇我们来顺便把前面heroku的坑也填上吧 这...

Day15:SwiftUI—TabView

前言 前面两篇介绍了 List、ForEach、ScrollView、Navigation, 这篇文...

[ Day7 ] General Skills 小暖身

今天我们再解 General Skills 2 题好了, 我看到和昨天同样概念的题型耶 一起解完好了...

【从零开始的 C 语言笔记】第十八篇-For Loop

不怎麽重要的前言 上一篇介绍了if条件式的语法,让我们可以依照设定好的条件来执行不同内容。 这次我们...