目錄
安裝
安裝Gitlab
安裝Gitlab Runner
安裝Maven
安裝JDK
使用
总结
首頁 Java java教程 再不用Gitlab的CI/CD功能,你就out了

再不用Gitlab的CI/CD功能,你就out了

Jul 30, 2021 pm 05:12 PM
git java springboot

最近發現Gitlab的CI/CD功能也能實現自動化部署,而且用起來也挺簡單!如果你使用的是Gitlab作為Git倉庫的話,不妨試試它的CI/CD功能。本文還是以SpringBoot的自動化部署為例,實作下Gitlab的CI/DI功能。

SpringBoot實戰電商專案mall(50k star)網址:https://github.com/macrozheng/mall

安裝

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

安裝Gitlab

首先我們來安裝下Gitlab,對Gitlab安裝和使用不了解的朋友可以參考下《10分鐘搭建自己的Git倉庫》 。

使用以下指令執行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即可登入;

再不用Gitlab的CI/CD功能,你就out了

將我們的SpringBoot應用程式碼上傳到Gitlab上去,這樣Gitlab就準備好了!這裡要注意的是,如果你在啟動Gitlab的時候沒有指定hostname的話,你的專案HTTP存取位址會是容器的ID,使用該位址會無法存取Git倉庫!

再不用Gitlab的CI/CD功能,你就out了

安裝Gitlab Runner

Gitlab只是個程式碼倉庫,想要實作CI/CD還要安裝gitlab-runner,gitlab-runner相當於Gitlab中任務的執行器,Gitlab會在需要執行任務時呼叫它。

先下載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的CI/CD功能,你就out了

接下來使用以下指令,進入gitlab-runner容器的內部;

docker exec -it gitlab-runner /bin/bash
登入後複製

在容器內使用以下指令註冊runner;

gitlab-runner register
登入後複製

註冊時會出現互動介面,提示你輸入註冊位址、token、執行器類型等訊息,ssh執行器能遠端執行Linux指令,非常好用,推薦使用這個!

再不用Gitlab的CI/CD功能,你就out了

註冊完成後,我們可以發現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成功註冊了!

再不用Gitlab的CI/CD功能,你就out了

安裝Maven

SpringBoot專案打包需要依賴Maven,我們需要在伺服器上先安裝好它。

下載Maven的Linux安裝包,下載網址:https://maven.apache.org/down...

再不用Gitlab的CI/CD功能,你就out了

下載完成後使用如下命令解壓縮到指定目錄;

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。

下載JDK 8,下載位址:https://mirrors.tuna.tsinghua...

再不用Gitlab的CI/CD功能,你就out了

下載完成後將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应用的自动化部署了!

首先在项目的根目录下添加.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的CI/CD功能,你就out了

由于我们的gitlab-runner采用的是ssh的执行器,它会登录到我们指定的服务器,执行我们在.gitlab-ci.yml中定义的script命令,在此之前还会先从Git仓库中获取代码,所以我们还需修改下服务器上的host文件;

vim /etc/hosts
192.168.7.134 git.macrozheng.com
登入後複製

接下来就是要把脚本提交到Git仓库上去,提交后会在Project->CI/CD->Pipelines中发现正在执行的任务;

再不用Gitlab的CI/CD功能,你就out了

打开Pipeline的详情页面,可以发现我们定义的两个任务都已经执行成功了;

再不用Gitlab的CI/CD功能,你就out了

打开Job的详情界面,我们可以看到任务执行过程中输出的日志信息;

再不用Gitlab的CI/CD功能,你就out了

如果你想手动执行Pipeline,而不是提交触发的话,可以在Pipelines页面点击Run Pipeline按钮即可;

再不用Gitlab的CI/CD功能,你就out了

运行成功后,可以通过如下地址访问项目:http://192.168.7.134:8088/swa...

再不用Gitlab的CI/CD功能,你就out了

总结

如果你用Gitlab作为Git仓库的话,使用它的CI/CD功能来实现自动化部署确实很不错!安装一个轻量级gitlab-runner,编写简单的.gitlab-ci.yml脚本文件即可实现。其实我们之前以及介绍过很多种自动化部署方案,比如Jenkins、Gogs+Drone、Gitlab CI/CD,我们可以发现一个共同点,这些方案都离不开Linux命令。 所以说要想玩转自动化部署,还是得先玩转Linux命令!

相关视频教程推荐:Java视频教程

以上是再不用Gitlab的CI/CD功能,你就out了的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

git怎么生成ssh密鑰 git怎么生成ssh密鑰 Apr 17, 2025 pm 01:36 PM

為了安全連接遠程 Git 服務器,需要生成包含公鑰和私鑰的 SSH 密鑰。生成 SSH 密鑰的步驟如下:打開終端,輸入命令 ssh-keygen -t rsa -b 4096。選擇密鑰保存位置。輸入密碼短語以保護私鑰。將公鑰複製到遠程服務器上。將私鑰妥善保存,因為它是訪問帳戶的憑據。

git怎麼刪除倉庫 git怎麼刪除倉庫 Apr 17, 2025 pm 04:03 PM

要刪除 Git 倉庫,請執行以下步驟:確認要刪除的倉庫。本地刪除倉庫:使用 rm -rf 命令刪除其文件夾。遠程刪除倉庫:導航到倉庫設置,找到“刪除倉庫”選項,確認操作。

git賬戶怎麼添加公鑰 git賬戶怎麼添加公鑰 Apr 17, 2025 pm 02:42 PM

如何將公鑰添加到 Git 賬戶?步驟:生成 SSH 密鑰對。複製公鑰。在 GitLab 或 GitHub 中添加公鑰。測試 SSH 連接。

git提交後怎麼回退 git提交後怎麼回退 Apr 17, 2025 pm 01:06 PM

要回退 Git 提交,可以使用 git reset --hard HEAD~N 命令,其中 N 代表要回退的提交數量。詳細步驟包括:確定要回退的提交數量。使用 --hard 選項以強制回退。執行命令以回退到指定的提交。

git服務器怎麼連接公網 git服務器怎麼連接公網 Apr 17, 2025 pm 02:27 PM

將 Git 服務器連接到公網包括五個步驟:1. 設置公共 IP 地址;2. 打開防火牆端口(22、9418、80/443);3. 配置 SSH 訪問(生成密鑰對、創建用戶);4. 配置 HTTP/HTTPS 訪問(安裝服務端、配置權限);5. 測試連接(使用 SSH 客戶端或 Git 命令)。

git怎麼檢測ssh git怎麼檢測ssh Apr 17, 2025 pm 02:33 PM

要通過 Git 檢測 SSH,需要執行以下步驟:生成 SSH 密鑰對。將公鑰添加到 Git 服務器。配置 Git 使用 SSH。測試 SSH 連接。根據實際情況解決可能遇到的問題。

git代碼衝突怎麼處理 git代碼衝突怎麼處理 Apr 17, 2025 pm 02:51 PM

代碼衝突是指當多個開發者修改同一段代碼導致 Git 合併時無法自動選擇更改而出現的衝突。解決步驟包括:打開有衝突的文件,找出衝突代碼。手動合併代碼,將要保留的更改複製到衝突標記內。刪除衝突標記。保存並提交更改。

git commit怎麼用 git commit怎麼用 Apr 17, 2025 pm 03:57 PM

Git Commit 是一種命令,將文件變更記錄到 Git 存儲庫中,以保存項目當前狀態的快照。使用方法如下:添加變更到暫存區域編寫簡潔且信息豐富的提交消息保存並退出提交消息以完成提交可選:為提交添加簽名使用 git log 查看提交內容

See all articles