GitLabel + Runner 實現自動化 CICD

        之前一篇文章,我們對 GitLab(代碼管理工具) 和 Runner (自動化編譯部署工具)的安裝進行了講解,如果沒看,去這裏 =>GItLab + Runner 安裝

       這篇文章,我就將以搭建 gitbook 工具爲例整個代碼發佈,自動化編譯,部署過程記錄下來。GitBook 是基於NodeJS 的一個文章發佈工具。

 

代碼部分:

       1,GitLab 啓動後,我們創建一個項目,Git 創建項目,這裏不細說了,總之,就是創建一個項目。

       2,我們 clone 代碼到本地,然後在項目中進行內容編輯,我的項目結構 如下圖,目錄結構挺重要,否則後續編譯docker鏡像的時候,會有點麻煩,所以book和dockerfile是同級目錄,在編譯dockerfile的時候,方便copy

            

###項目說明

1,book 文件夾內所有內容,均爲gitbook 書本內容
2,.gitlab-ci.yml Runner 自動化編譯發佈需要的配置文件
3,dockerfile 我們部署用到的dockerfile文件
### .gitlab-ci.yml 文件

variables:
  WORKSPACES: /builds/$CI_PROJECT_PATH
  DOCKER_IMAGE_NAME: gitbook
  DOCKER_CONTAINER_NAME: gitbook

image: $DOCKER_IMAGE_NAME:latest
stages:
  - deploy  

deploy:
  stage: deploy

  tags:
    - gitbook

  only:
    - master
  script:
    - docker stop $DOCKER_CONTAINER_NAME && docker rm -v $DOCKER_CONTAINER_NAME
    - docker rmi -f $DOCKER_IMAGE_NAME
    - docker build --no-cache --rm -t $DOCKER_IMAGE_NAME:latest .
    - docker run -dit --name $DOCKER_CONTAINER_NAME -p 9999:15016 $DOCKER_IMAGE_NAME:latest
### dockerfile 文件

From nodejs:8.9

WORKDIR /gitbook

COPY book /gitbook

RUN npm install -g gitbook-cli &&\
    gitbook init

CMD ["gitbook", "serve","--port","15016"]

自動化編譯:

         使用Renner做自動化,要先給項目註冊Renner。

### 註冊過程

sudo docker exec -it gitlab-runner gitlab-ci-multi-runner register

# 因爲之前我們的 gitlab-runner 環境是在 docker 中的, 所以,我們直接使用命令進行註冊就好


Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/ci):
URL(在GitLab 項目中進行查找)

Please enter the gitlab-ci token for this runner:
Token(在GitLab 項目中進行查找)

Please enter the gitlab-ci description for this runner:
[DESKTOP-2P9GHDD]: gitbook(描述)

Please enter the gitlab-ci tags for this runner (comma separated):
gitbook(這裏就是 tags 了,通過這個標記來看是哪個執行)

Registering runner... succeeded runner=avuSXASJ Please enter the executor: docker-ssh, 
parallels, shell, ssh, virtualbox, docker+machine, docker-ssh+machine, docker:
這裏是我們需要進行的CI/CD的執行者, 一般是docker 或者 shell,沒什麼太大區別,我使用 shell,
如果選擇 docker 的話, 後面還會有一個讓你輸入鏡像名稱和版本的操作,shell會直接完成。

Runner registered successfully. Feel free to start it, but if it's running already the 
config should be automatically reloaded!
這裏是完成

URL 和 Token 配圖

 

         在 yum 文件中,我們可以對整個 CI/CD 生命週期進行定製(上述代碼包含了編譯部署),我們可以單獨定製編譯,可以單獨定製測試或者部署,配置內容詳解,去官方查看即可,這裏我會解釋我的配置中用到的東西。

variables: 變量的設置
image: 使用的鏡像
stages: CI CD 的過程(我只有部署 deploy, 還可以 build , test 自定義 等)
deploy: 執行過程的名字
stage: CI/CD 過程類型
tags: 這裏是 Runner Register 的時候設置的標記,有了它才能進行CI/CD
script: CI/CD 過程中需要的腳本
only: 代碼分支,或者代碼標記等,都可以

 

部署:

        不管是編譯,還是測試,還是部署,其中是需要一個過程的思路的,我做的是GitBook環境,加自動化提交代碼 CI/CD 過程。那麼我要部署 GitBook 大概思路是,獲取代碼,編譯,運行,那麼我們一步步來結局。

        獲取代碼:這裏其實是不用去管的,Renner會自動從 GitLab 拉取代碼,在CI 整個過程中,gitlab-runner 用戶(Renner會自動創建一個用戶)會一直在項目代碼的根目錄,除非你需要代碼放到其他地方去。

        編譯:每個工程編譯過程都不一樣,node/c#/java 或者其他的工具,每種都不同,選擇一款自己需要的,GitBook 有自動化編譯命令 init

        部署:在上面的內容中,部署的過程是需要寫入 script 標籤下腳本中的,這裏纔是部署的真正過程,當然, 我的編譯過程,也會在裏面,這裏是我部署的整個過程,我的代碼編譯放進了鏡像編譯的過程內,

### 停止已運行的容器 並 刪除該容器
- docker stop $DOCKER_CONTAINER_NAME && docker rm -v $DOCKER_CONTAINER_NAME

### 刪除原有鏡像
- docker rmi -f $DOCKER_IMAGE_NAME

### 重新生成鏡像(gitbook生成實在dockerfile過程中進行 init 操作的)
- docker build --no-cache --rm -t $DOCKER_IMAGE_NAME:latest .

### 啓動容器
- docker run -dit --name $DOCKER_CONTAINER_NAME -p 9999:15016 $DOCKER_IMAGE_NAME:latest

dockerfile 中 gitbook init

### dockerfile 文件中 npm 安裝gitbook 並 初始化init書籍(編譯)
RUN npm install -g gitbook-cli && gitbook init

### 啓動gitbook服務
CMD ["gitbook", "serve","--port","15016"]

這時候,我們整個過程就結束了,我們就可以通過瀏覽器訪問自己的gitbook了

致:踩過的那些坑

可以看我的碼雲:去碼雲看看

本章到此結束

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章