用上了Jenkins,個人部署項目真方便!

作者:小傅哥

博客:https://bugstack.cn

項目:https://gaga.plus

沉澱、分享、成長,讓自己和他人都能有所收穫!😄

本文的宗旨在於通過簡單幹淨實踐的方式教會讀者,如何在 Docker 中部署 Jenkins,並通過 Jenkins 完成對項目的打包構建並在 Docker 容器中部署。

Jenkins 的主要作用是幫助你,把需要在本地機器完成的 Maven 構建、Docker 鏡像發佈、雲服務器部署等系列動作全部集成在一個服務下。簡化你的構建部署操作過程,因爲 Jenkins 也被稱爲 CI&CD(持續集成&持續部署) 工具。提供超過 1000 個插件(Maven、Git、NodeJs)來支持構建、部署、自動化, 滿足任何項目的需要。

官網:

本文涉及的工程:

一、操作說明

本節小傅哥會帶着大家完成 Jenkins 環境的安裝,以及以最簡單的方式配置使用 Jenkins 完成對 xfg-dev-tech-jenkins 案例項目的部署。部署後可以訪問 xfg-dev-tech-jenkins 項目提供的接口進行功能驗證。整個部署操作流程如下;

  • 左側豎列爲核心配置部署流程,右側是需要在配置過程中處理的細節。
  • 通過把本地對項目打包部署的過程拆解爲一個個模塊,配置到 Jenkins 環境中。這就是 Jenkins 的作用。

二、環境配置

  1. 確保你已經在(雲)服務器上配置了 Docker 環境,以及安裝了 docker-compose。同時最好已經安裝了 Portainer 管理界面這樣更加方便操作。
  2. 在配置和後續的驗證過程中,會需要訪問(雲)服務的地址加端口。如果你在雲服務配置的,記得開放端口;9000 - portainer9090 - jenkins8091 - xfg-dev-tech-app 服務

1. Jenkins 部署

1.1 上傳文件

  • 如圖;以上配置內容已經放到 xfg-dev-tech-jenkins 工程中,如果你是雲服務器部署則需要將 dev-ops 部分全部上傳到服務器的根目錄下。
  • compose-down.sh 是 docker-compose 下載文件,只有你安裝了 docker-compose 才能執行 docker-compose -f docker-compose-v1.0.yml up -d
  • jdk-down.sh 是 jdk1.8 下載路徑,以及解壓腳本。如果你在雲服務器下載較慢,也可以本地搜索 jdk1.8 下載,並上傳到雲服務器上解壓。注意:本步驟是可選的,如果你的項目不強依賴於 jdk1.8 也可以使用 Jenkins 默認自帶的 JDK17。可以通過在安裝後的 Jenkins 控制檯執行 which java 找到 JDK 路徑。
  • maven 下的 settings.xml 配置,默認配置了阿里雲鏡像文件,方便在 Jenkins 構建項目時,可以快速地拉取下載下來包。

1.2 腳本說明

version: '3.8'
# 執行腳本;docker-compose -f docker-compose-v1.0.yml up -d
services:
  jenkins:
    image: jenkins/jenkins:2.439
    container_name: jenkins
    privileged: true
    user: root
    ports:
      - "9090:8080"
      - "50001:50000"
    volumes:
      - ./jenkins_home:/var/jenkins_home # 如果不配置到雲服務器路徑下,則可以配置 jenkins_home 會創建一個數據卷使用
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/bin/docker:/usr/local/bin/docker
      - ./maven/conf/settings.xml:/usr/local/maven/conf/settings.xml # 這裏只提供了 maven 的 settings.xml 主要用於修改 maven 的鏡像地址
      - ./jdk/jdk1.8.0_202:/usr/local/jdk1.8.0_202 # 提供了 jdk1.8,如果你需要其他版本也可以配置使用。
    environment:
      - JAVA_OPTS=-Djenkins.install.runSetupWizard=false # 禁止安裝嚮導「如果需要密碼則不要配置」docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
    restart: unless-stopped

volumes:
  jenkins_home:

Jenkins Docker 執行安裝腳本。

  • ./jenkins_home:/var/jenkins_home 是在雲服務器端掛一個映射路徑,方便可以重新安裝後 Jenkins 依然存在。你也可以配置爲 jenkins_home:/var/jenkins_home 這樣是自動掛在 volumes jenkins_home 數據卷下。
  • docker 兩個 docker 的配置是爲了可以在 Jenkins 中使用 Docker 命令,這樣才能在 Docker 安裝的 Jenkins 容器內,使用 Docker 服務。
  • ./maven/conf/settings.xml:/usr/local/maven/conf/settings.xml 爲了在 Jenkins 中使用映射的 Maven 配置。
  • ./jdk/jdk1.8.0_202:/usr/local/jdk1.8.0_202 用於在 Jenkins 中使用 jdk1.8
  • JAVA_OPTS=-Djenkins.install.runSetupWizard=false 這個是一個禁止安裝嚮導,配置爲 false 後,則 Jenkins 不會讓你設置密碼,也不會一開始就安裝一堆插件。如果你需要安裝嚮導可以註釋掉這個配置。並且當提示你獲取密碼時,你可以執行;docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword 獲取到登錄密碼。

1.3 執行安裝

[root@lavm-aqhgp9nber dev-ops]# docker-compose -f docker-compose-v1.0.yml up -d
[+] Building 0.0s (0/0)                                                                                                       
[+] Running 1/0
 ✔ Container jenkins  Running 

執行腳本 docker-compose -f docker-compose-v1.0.yml up -d 後,這樣執行完畢後,則表明已經安裝成功了💐。

2. 插件安裝

地址:http://localhost:9090/ - 登錄Jenkins

  • 1~2步,設置鏡像源,設置後重啓一下 Jenkins。
  • 3~4步,下載插件,先下載安裝 chinese 漢化插件,方便不太熟悉 Jenkins 的夥伴更好的知道頁面都是啥內容。
  • 5步,所有的插件安裝完成後,都需要重啓纔會生效。安裝完 chinese 插件,重啓在進入到 Jenkins 就是漢化的頁面了
  • 除了以上步驟,你還需要同樣的方式安裝 maven、git、docker 插件。
  • 注意,因爲網絡問題你可以再做過程中,提示失敗。沒關係,你可以再搜這個插件,再重新下載。它會把失敗的繼續下載。

3. 全局工具配置

地址:http://localhost:9090/manage/configureTools/

用於構建部署的 SpringBoot 應用的環境,都需要在全局工具中配置好。包括;Maven、JDK、Git、Docker。注意這裏的環境路徑配置,如果配置了是會提示你沒有對應的路徑文件夾。

4. 添加憑證

地址:http://localhost:9090/manage/credentials/store/system/domain/_/

  • 配置了Git倉庫的連接憑證,才能從Git倉庫拉取代碼。
  • 如果你還需要操作如 ssh 也需要配置憑證。

三、新建任務

一個任務就是一條構建發佈部署項目的操作。

1. 配置任務

xfg-dev-tech-jenkins

2. 配置Git

# 你可以 fork 這個項目,到自己的倉庫進行使用
https://gitcode.net/KnowledgePlanet/ddd-scene-solution/xfg-dev-tech-content-moderation.git

3. 配置Maven

  • 在高級中設置 Maven 配置的路徑 /usr/local/maven/conf/settings.xml。這樣才能走自己配置的阿里雲鏡像倉庫。
clean install -Dmaven.test.skip=true

3. 配置Shell

# 先刪除之前的容器和鏡像文件
if [ "$(docker ps -a | grep xfg-dev-tech-app)" ]; then
docker stop xfg-dev-tech-app
docker rm xfg-dev-tech-app
fi
if [ "$(docker images -q xfg-dev-tech-app)" ]; then
docker rmi xfg-dev-tech-app
fi

# 重新生成
cd /var/jenkins_home/workspace/xfg-dev-tech-jenkins/xfg-dev-tech-app
docker build -t xiaofuge/xfg-dev-tech-app .
docker run -itd -p 8091:8091 --name xfg-dev-tech-app xiaofuge/xfg-dev-tech-app
  • 當你熟悉後還可以活學活用,比如這裏只是做build 但不做run執行操作。具體的部署可以通過 docker compose 執行部署腳本。
  • 另外如果你有發佈鏡像的訴求,也可以在這裏操作。

四、測試驗證

1. 工程準備

工程https://gitcode.net/KnowledgePlanet/road-map/xfg-dev-tech-jenkins 你可以fork到自己的倉庫進行使用,你的賬號密碼就是 CSDN 的賬號密碼。

@SpringBootApplication
@RestController()
@RequestMapping("/api/")
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }

    /**
     * http://localhost:8091/api/test
     */
    @RequestMapping(value = "/test", method = RequestMethod.GET)
    public ResponseBodyEmitter test(HttpServletResponse response) {
        response.setContentType("text/event-stream");
        response.setCharacterEncoding("UTF-8");
        response.setHeader("Cache-Control", "no-cache");

        ResponseBodyEmitter emitter = new ResponseBodyEmitter();

        String[] words = new String[]{"嗨,臭寶。\r\n", "恭喜💐 ", "你的", " Jenkins ", " 部", "署", "測", "試", "成", "功", "了啦🌶!"};
        new Thread(() -> {
            for (String word : words) {
                try {
                    emitter.send(word);
                    Thread.sleep(250);
                } catch (IOException | InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        }).start();

        return emitter;
    }
    
}
  • 工程中提供了接口;http://localhost:8091/api/test

2. CI&CD - 構建發佈

地址http://localhost:9090/job/xfg-dev-tech-jenkins/

  • 點擊構建項目,最終會完成構建和部署成功。運行到這代表你全部操作完成了。

3. 驗證結果

地址http://localhost:9000/#!/2/docker/containers

訪問http://localhost:8091/api/test

  • 運行到這代表着你已經完整的走完了 Jenkins CI&CD 流程。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章