Day17 - GitLab CI 流水线建置

前言

从今天以及之後的几篇文章,将介绍如何打造 GitLab CI 流水线,以及如何透过 ArgoCD 来部署应用。

CI/CD 要帮助我们做哪些事?

CI/CD 的目的是希望透过撰写脚本的方式,将软件开发到部属的流程自动化,使服务能够快速上线,并减少人为失误,下面就来介绍 CI/CD 工具到底可以帮助我们完成哪些工作。

Build Image

在做测试或部属也好,需要有环境执行,但放在 Repository 上的只有程序码,没办法直接跑起来,所以 CI/CD 的第一步会是 Build ,在这个步骤,会使用专案的 Dockerfile 来 Build 出 Image,提供後续工作执行环境。

Test App

这个步骤会对建置好的 App 进行检查,像是能否成功执行、Coding Style 是否符合,最重要是会做 Unit Test,针对程序进行正确性的检验,通过测试环节,确保应用程序可以正常运作後,才能进入後续的部属任务。

Publish Image

测试完成後,需要将 Image 保存起来,提供部属环境做使用,所以这个步骤就是将 Image 上传到远端的 Container Registry 。

Stage Deploy

虽然已经对 Image 进行了多种测试,但因为环境配置不同,投入到正式环境可能又会遇到一系列的麻烦,所以在进入生产环境前,会先将程序放入到与生产环境相仿的测试环境,我们称之为 Staging , 在这里对服务做一次实际测试,确定没问题後,才能够正式上线。

Production Deploy

所有的测试都没问题後,就可以将服务部属到生产环境,因为这个动作需要等待前一步完成後才能执行,所以会设定为手动触发。

这里的 Deploy 看似麻烦,其实只需要更新 Manifest 的 Image Tag 就行了,在之後的文章会详细说明怎麽做。

.gitlab-ci.yml 基本建置

在 GitLab 要如何使用 CI/CD 工具,只需在专案里建置名为 .gitlab-ci.yml 的档案,GitLab 就会根据 yml 档建置出 CI/CD 流水线。下面就简单介绍 .gitlab-ci.yml 的基本格式。

Stage代表着 CI/CD 里的其中一个步骤,一开始需要先定义好 Pipeline 中有哪些 Stages ,并设定好前後顺序。

stages:
  - build
  - test
  - publish
  - stg-deploy
  - prod-deploy

Pipeline 会依序执行 build -> test -> publish -> stg-deploy -> prod-deploy 步骤

接着会在 Stage 里设置一到多个 Job 来完成此步骤的工作,而为了区分在开发、部属分支所需的 Job 不同,里面会设定要在哪个 Branch 才会触发。

job-name:
  stage: build
  only:
    - branch
  script:
    - echo "My first job"
  • stage
    • 这个 Job 属於哪一个 Stage
  • only
    • 在哪个 Branch 才会执行
  • script
    • 需要执行的指令

设定好 StageJob 後,就可以建置出一个基本的 CI/CD 流水线,就来实际动手操作吧!

建立 CI/CD Pipeline

  1. 进入 Cloud Shell 网站,点击终端机输入指令

  2. 建立 .gitlab-ci.yml 档案

cd project && touch .gitlab-ci.yml
  1. 点击左上 Explorer -> Open Folder -> 选择 project 资料夹 -> Open

  1. 点击 .gitlab-ci.yml 档案并贴上以下内容

https://ithelp.ithome.com.tw/upload/images/20210917/20139235i3L2FoC53M.png

  • .gitlab-ci.yml
stages:
  - build
  - test
  - publish
  - stg-deploy
  - prod-deploy

build:
  stage: build
  only:
    - dev
    - master
  script:
    - echo "build job"

test:
  stage: test
  only:
    - dev
    - master
  script:
    - echo "test job"

publish:
  stage: publish
  only:
    - master
  script:
    - echo "publish job"

stg-deploy:
  stage: stg-deploy
  only:
    - master
  script:
    - echo "Staging deploy job"

prod-deploy:
  stage: prod-deploy
  only:
    - master
  script:
    - echo "Production deploy job"
  when: manual

在这里定义了所需的 Stages 以及 Jobs ,且在 prod-deploy 会设定 when: manual 设定此 Job 为手动触发。

  1. 建立 Commit 并 Push 到 GitLab 上
git add .
git commit -m "init .gitlab-ci.yml"
git push origin master
  1. 输入 GitLab 帐号密码後按Enter
Username for 'https://gitlab.com': 
Password for 'https://[email protected]':
  1. GitLab 网站,点击之前建立的 web app 的 Repository

  2. 进入到 Repository 後,点击 CI/CD -> Pipelines

https://ithelp.ithome.com.tw/upload/images/20210917/201392357u4MjrGSMO.png

这里可以看到每一次 CI/CD 的运行结果。

https://ithelp.ithome.com.tw/upload/images/20210917/20139235lKCMO7cNaz.png

点击运行结果就可以看到执行状态以及 Log 。

https://ithelp.ithome.com.tw/upload/images/20210917/20139235FNeDw2irOm.png

结论

今天完成了 CI/CD Pipeline ,但对 Stage 我们还没有做任何实际意义上的工作,所以之後几天中会讲解要如何建立各个 Stage 已完成 CI/CD 所需步骤。


<<:  DAY17 服务室--JSON Server 部属

>>:  1.1 Design system - 为什麽要做?

[从0到1] C#小乳牛 练成基础程序逻辑 Day 26 - String操纵术III

地毯式搜索 Contains() | 字串之子 SubString() | 有没有这个人? IsN...

SQL 语言和你 SAY HELLO!!

第三十天 各位点进来的朋友,你们好阿 小的不才只能做这个系列的文章,但还是希望分享给点进来的朋友,知...

Day 27: 人工智慧在音乐领域的应用 (索尼-Flow Machine、谷歌-Magenta )

今天开始我们来介绍一些已经有公开发布成果或是已经有成熟软件提供用户使用的公司产品。 索尼 (Sony...

第三天:Gradle 的 5 个重要观念

Gradle 可以做的事情实在太多了,导致初学者很容易被其强大又神秘的架构吓到。因此笔者觉得有必要把...

[Day 09] - Spring Boot 实作登入验证(三)(JWT实作)

忙碌的一天又过去了,下班回家头昏眼花的... 要完成铁人赛真的需要超凡意志,还好今天星期五... 好...