基於Docker部署GitLib Runner

前言

最近一直在想學習一下CI/CD的整個流程,公司代碼倉庫的管理是用的GitLab剛好在上面看到了CI/CD,所以這裏我就想用GitLab去使用一個項目的CI/CD。

公司使用的Azure DevOps,使用了半年這個產品我說說我的感受:

首先說說DevOps,DevOps爲也是最近半年才聽說,DevOps這個概念早在2009年就開始提出了,從字面上理解拆成Dev(開發)+Ops(運維)的集成。從知乎上看到:DevOps強調的是高效組織團隊之間如何通過自動化工具的溝通和協作來完成軟件的生命週期管理,從而更快,更頻繁的交付穩定的軟件
目前我們公司在Azure DevOps實現了產品需求,測試,CI/CD的管理,總體而言較傳統的開發模式效率提升了不少。

CI/CD

現在市面上支持CI/CD的產品有許多,我說知道的就有包括Jenkins,GitLib,Azure DevOps,相信現在跟多項目都是使用的Jenkins進行的CI/CD,我也不怎麼熟悉也不做過多的描述,而Azure DevOps CI/CD的工具都是圖形化的操作友好許多。

基於Docker部署GitLib Runner

GitLib Runner運行在Docker能夠快速運行起來,Docker鏡像裏的GitLib Runner都配置好的,能夠做到一次打包多地運行,只需要裝好Docker運行環境。

1. 部署環境

  1. Docker: Docker version 18.09.7
  2. Docker-compose: docker-compose version 1.24.0
  3. GitLab: 12.5.0
  4. GitLab Runner: 12.5.0

2. 環境準備

2.1 下載安裝包
  • 創建目錄: /data/docker/runner/environment
  • 下載JDK: jdk-8u231-linux-x64.tar.gz, 複製到 /data/docker/runner/environment目錄下
  • 下載Maven: apache-maven-3.6.3-bin.tar.gz, 複製到/data/docker/runner/environment目錄下

TODO描述GitLab Runner運行流程

這裏下載JDK和Maven安裝包是可以將GitLab Runner容器本身可以作爲一個打包的節點。

2.2編寫Dockerfile

進入/data/docker/runner/environment目錄創建文件Dockerfile

FROM gitlab/gitlab-runner
MAINTAINER yjyzsl <[email protected]>

# 修改軟件源
RUN echo 'deb https://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse' > /etc/apt/sources.list && \
    echo 'deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse' >> /etc/apt/sources.list && \
    echo 'deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse' >> /etc/apt/sources.list && \
    echo 'deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse' >> /etc/apt/sources.list && \
    apt-get update -y && \
    apt-get clean

# 安裝 Java
RUN mkdir -p /usr/local/java
WORKDIR /usr/local/java
COPY jdk-8u231-linux-x64.tar.gz /usr/local/java
RUN tar -zxvf jdk-8u231-linux-x64.tar.gz && \
    rm -fr jdk-8u231-linux-x64.tar.gz

# 安裝 Maven
RUN mkdir -p /usr/local/maven
WORKDIR /usr/local/maven
# RUN wget http://apache.crihan.fr/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
COPY apache-maven-3.6.3-bin.tar.gz /usr/local/maven
RUN tar -zxvf apache-maven-3.6.3-bin.tar.gz && \
    rm -fr apache-maven-3.6.3-bin.tar.gz
# COPY settings.xml /usr/local/maven/apache-maven-3.6.3/conf/settings.xml

# 配置環境變量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_231
ENV MAVEN_HOME /usr/local/maven/apache-maven-3.6.3
ENV PATH $PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin

WORKDIR /

通過Dockerfile構建一個可以Maven編譯打包的環境

2.3 編寫docker-compose.yaml

/data/docker/runner目錄下創建docker-compose.yaml,
將gitlab-runner容器的文件映射到宿主機目錄上

version: '3.1'
services:
  gitlab-runner:
    build: environment
    restart: always
    container_name: gitlab-runner
    privileged: true
    volumes:
      - ./config:/etc/gitlab-runner
      - /var/run/docker.sock:/var/run/docker.sock

3. 部署啓動

3.1. 通過docker-compose啓動
docker-compose -f docker-compose.yaml up -d
3.2. 註冊Runner

其中GitLab地址和GitLab Token在 Project --> Settings --> CI/CD --> Runners 中查看

docker exec -it gitlab-runner gitlab-runner register

# 輸入 GitLab 地址
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://xxx.xxx.xxx.xxx/

# 輸入 GitLab Token
Please enter the gitlab-ci token for this runner:
cXxxxxxxxxxxxxxu

# 輸入 Runner 的說明
Please enter the gitlab-ci description for this runner:
my-runner

# 設置 Tag,可以用於指定在構建規定的 tag 時觸發 ci
Please enter the gitlab-ci tags for this runner (comma separated):
maven

# 選擇 runner 執行器,這裏我們選擇的是 docker
Please enter the executor: virtualbox, docker+machine, parallels, shell, ssh, docker-ssh+machine, kubernetes, docker, docker-ssh:
docker

# 選擇鏡像
maven:3-jdk-8

註冊完之後,如下圖顯示:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ptLARxs4-1582982682899)(en-resource://database/1541:1)]

4. 測試GitLab CI

4.1. 編寫.gitlab-ci.yml
stages:
- build
- package
build:
  stage: build
  tags:
  - maven-3.6
  script:
  - echo "=============== mvn compile ==============="
  - mvn compile
package:
  stage: package
  tags:
  - maven-3.6
  script:
  - echo "===============  mvn package  ==============="
  - mvn package

提交到Gitlab上,在CI/CD --> Piplelines 下會看到剛剛提交的代碼會觸發一次CI任務,如下圖所示:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Oj6tNRa7-1582982682912)(en-resource://database/1543:1)]

對應的日誌如下:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-r0J5yyXh-1582982682918)(en-resource://database/1545:1)]

本文參考

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