還在用Jenkins?試試Gitlab的CI/CD功能吧,賊帶勁!

SpringBoot實戰電商項目mall(50k+star)地址:github.com/macrozheng/…html

摘要

以前寫過一篇文章《再見 Jenkins !幾行腳本搞定自動化部署,這款神器有點厲害!》 ,講的是使用Gogs+Drone來實現自動化部署。最近發現Gitlab的CI/CD功能也能實現自動化部署,用起來也挺簡單!若是你使用的是Gitlab做爲Git倉庫的話,不妨試試它的CI/CD功能。本文仍是以SpringBoot的自動化部署爲例,實踐下Gitlab的CI/DI功能,但願對你們有所幫助!java

安裝

經過Gitlab的CI/CD功能實現自動化部署,咱們須要安裝Gitlab、Gitlab Runner、Maven這些服務。linux

安裝Gitlab

首先咱們來安裝下Gitlab,對Gitlab安裝和使用不了解的朋友能夠參考下《10分鐘搭建本身的Git倉庫》nginx

  • 使用以下命令運行Gitlab服務,這裏須要注意的是添加了hostname屬性,這樣咱們就能夠經過域名來訪問Gitlab了(爲了不一些沒必要要的麻煩),GITLAB_ROOT_PASSWORD這個環境變量能夠直接設置Gitlab中root帳號的密碼;
docker run --detach \
  --hostname git.macrozheng.com \
  --publish 10443:443 --publish 1080:80 --publish 1022:22 \
  --name gitlab \
  --restart always \
  --volume /mydata/gitlab/config:/etc/gitlab \
  --volume /mydata/gitlab/logs:/var/log/gitlab \
  --volume /mydata/gitlab/data:/var/opt/gitlab \
  -e GITLAB_ROOT_PASSWORD=12345678 \
  gitlab/gitlab-ce:latest
複製代碼
  • 咱們須要經過git.macrozheng.com這個域名來訪問Gitlab,若是你沒有域名的話,能夠經過修改本機的host文件來實現;
192.168.7.134 git.macrozheng.com
複製代碼
  • 因爲咱們的Gitlab運行在1080端口上,咱們想要不加端口來訪問,能夠使用Nginx來反向代理下,對Nginx不熟悉的朋友能夠看下《Nginx的這些妙用,你確定有不知道的!》 ,在Nginx的配置文件夾中添加git.conf配置文件,內容以下:
server {
    listen       80; # 同時支持HTTP
    server_name  git.macrozheng.com; #修改域名

    location / {
        proxy_pass   http://192.168.7.134:1080; # 設置代理服務訪問地址
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
複製代碼
  • 以後咱們就能夠經過git.macrozheng.com這個域名來訪問Gitlab了,輸入帳號密碼root:12345678便可登陸;

  • 將咱們的SpringBoot應用代碼上傳到Gitlab上去,這樣Gitlab就準備完畢了!這裏須要注意的是,若是你在啓動Gitlab的時候沒有指定hostname的話,你的項目HTTP訪問地址會是容器的ID,使用該地址會沒法訪問Git倉庫!

安裝Gitlab Runner

Gitlab只是個代碼倉庫,想要實現CI/CD還需安裝gitlab-runnergitlab-runner至關於Gitlab中任務的執行器,Gitlab會在須要執行任務時調用它。git

  • 首先下載gitlab-runner的Docker鏡像,選用alpine-bleeding,這個版本很是小巧!
docker pull gitlab/gitlab-runner:alpine-bleeding
複製代碼
  • 使用以下命令運行gitlab-runner
docker run --name gitlab-runner --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /mydata/gitlab-runner:/etc/gitlab-runner \
-d gitlab/gitlab-runner:alpine-bleeding
複製代碼
  • 此時咱們若是查看gitlab-runner的容器日誌的話,會發現以下錯誤,config.toml文件找不到,這個問題沒必要擔憂,當咱們將gitlab-runner註冊到Gitlab時,會自動生成該文件;
ERROR: Failed to load config stat /etc/gitlab-runner/config.toml: no such file or directory  builds=0
複製代碼
  • 接下來咱們須要把gitlab-runner註冊到Gitlab,打開Project->Settings->CI/CD功能,獲取到runner註冊須要使用的地址和token;

  • 接下來使用以下命令,進入gitlab-runner容器的內部;
docker exec -it gitlab-runner /bin/bash
複製代碼
  • 在容器內使用以下命令註冊runner;
gitlab-runner register
複製代碼
  • 註冊時會出現交互界面,提示你輸入註冊地址、token、執行器類型等信息,ssh執行器能遠程執行Linux命令,很是好用,推薦使用這個!

  • 註冊完成後,咱們能夠發現config.toml文件已經生成,內容以下,之後想修改runner配置的時候,直接改這個文件就好了。
concurrent = 1
check_interval = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "docker-runner"
  url = "http://192.168.7.134:1080/"
  token = "c2kpV6tX6woL8TMxzBUN"
  executor = "ssh"
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.ssh]
    user = "root"
    password = "123456"
    host = "192.168.7.134"
    port = "22"
複製代碼
  • 在Gitlab的CI/CD設置中,咱們能夠發現,有個runner成功註冊了!

安裝Maven

SpringBoot項目打包須要依賴Maven,咱們須要在服務器上先安裝好它。github

  • 下載完成後使用以下命令解壓到指定目錄;
cd /mydata
tar -zxvf apache-maven-3.8.1-bin.tar.gz
複製代碼
  • 修改/etc/profile文件,添加環境變量配置:
export MAVEN_HOME=/mydata/apache-maven-3.8.1
export PATH=$PATH:$MAVEN_HOME/bin
複製代碼
  • 經過查看Maven版原本測試是否安裝成功。
mvn -v
複製代碼
Maven home: /mydata/apache-maven-3.8.1
Java version: 1.8.0_292, vendor: AdoptOpenJDK, runtime: /mydata/java/jdk1.8/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"
複製代碼

安裝JDK

CentOS上默認安裝的是JRE,使用Maven須要安裝JDK。docker

  • 下載完成後將JDK解壓到指定目錄;
cd /mydata/java
tar -zxvf OpenJDK8U-jdk_x64_linux_xxx.tar.gz
mv OpenJDK8U-jdk_x64_linux_xxx.tar.gz jdk1.8
複製代碼
  • /etc/profile文件中添加環境變量JAVA_HOME
vi /etc/profile
# 在profile文件中添加
export JAVA_HOME=/mydata/java/jdk1.8
export PATH=$PATH:$JAVA_HOME/bin
# 使修改後的profile文件生效
. /etc/profile
複製代碼

使用

一切準備就緒,接下來經過Gitlab的CI/CD功能就能夠實現SpringBoot應用的自動化部署了!apache

  • 首先在項目的根目錄下添加.gitlab-ci.yml文件,定義了兩個任務,一個任務會將應用代碼打包成Jar包並複製到指定目錄,另外一個任務會經過運行腳本run.sh打包應用的Docker鏡像並運行;
# 打包任務
build-job:
  stage: build
  # 指定標籤,只有具備該標籤的runner纔會執行
  tags:
    - docker
  script:
    # 使用Maven打包
    - mvn clean package
    # 將jar包、Dockerfile、運行腳本複製到指定目錄
    - cp target/mall-tiny-gitlab-1.0-SNAPSHOT.jar /mydata/build/mall-tiny-gitlab-1.0-SNAPSHOT.jar
    - cp Dockerfile /mydata/build/Dockerfile
    - cp run.sh /mydata/build/run.sh

# 部署任務
deploy-job:
  stage: deploy
  tags:
    - docker
  script:
    # 進入指定目錄並執行運行腳本
    - cd /mydata/build
    - chmod +x run.sh
    - ./run.sh
複製代碼
  • 這裏值得一提的是,默認狀況下runner只會執行具備相同標籤的Job,因爲咱們對Job和runner都設置了標籤爲docker,因此咱們這裏是能夠執行的。若是你沒有設置標籤的話,須要在runner的編輯界面設置下讓runner能夠執行沒有標籤的Job;

  • 因爲咱們的gitlab-runner採用的是ssh的執行器,它會登陸到咱們指定的服務器,執行咱們在.gitlab-ci.yml中定義的script命令,在此以前還會先從Git倉庫中獲取代碼,因此咱們還需修改下服務器上的host文件;
vim /etc/hosts
192.168.7.134 git.macrozheng.com
複製代碼
  • 接下來就是要把腳本提交到Git倉庫上去,提交後會在Project->CI/CD->Pipelines中發現正在執行的任務;

  • 打開Pipeline的詳情頁面,能夠發現咱們定義的兩個任務都已經執行成功了;

  • 打開Job的詳情界面,咱們能夠看到任務執行過程當中輸出的日誌信息;

  • 若是你想手動執行Pipeline,而不是提交觸發的話,能夠在Pipelines頁面點擊Run Pipeline按鈕便可;

總結

若是你用Gitlab做爲Git倉庫的話,使用它的CI/CD功能來實現自動化部署確實很不錯!安裝一個輕量級gitlab-runner,編寫簡單的.gitlab-ci.yml腳本文件便可實現。其實咱們以前以及介紹過不少種自動化部署方案,好比Jenkins、Gogs+Drone、Gitlab CI/CD,咱們能夠發現一個共同點,這些方案都離不開Linux命令。 因此說要想玩轉自動化部署,仍是得先玩轉Linux命令!vim

參考資料

官方文檔:docs.gitlab.com/ee/ci/bash

項目源碼地址

github.com/macrozheng/…

本文 GitHub github.com/macrozheng/… 已經收錄,歡迎你們Star!

相關文章
相關標籤/搜索