" />

欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Docker+Jenkins+Gitee自動化部署maven項(xiàng)目的實(shí)現(xiàn)

 更新時間:2023年06月01日 10:21:11   作者:fkjavaer  
本文主要介紹了Docker+Jenkins+Gitee自動化部署maven項(xiàng)目的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1.簡介

各位看官老爺,本文為Jenkins實(shí)戰(zhàn),注重實(shí)際過程,閱讀完會有以下收獲:

  • 了解如何使用Docker安裝Jenkins
  • 了解如何使用Jenkins部署maven項(xiàng)目
  • 了解如何使用Jenkins+Gitee實(shí)現(xiàn)自動化部署

2.Jenkins介紹

相信,正在讀這篇文章的你,對Jenkins應(yīng)該有或多或少的了解,就算沒有也應(yīng)該在某個地方聽說過。??

接下來,我們就一起來進(jìn)行探索吧。??

2.1 Jenkins是什么

Jenkins是一個開源的自動化工具,可以自動化地完成構(gòu)建、測試、交付或部署等任務(wù)??傊攸c(diǎn)就是三個字:自動化,至于如何實(shí)現(xiàn)這些功能,Jenkins基于插件化的機(jī)制,提供了眾多的插件來完成持續(xù)集成與持續(xù)部署。

2.2 什么是持續(xù)集成與持續(xù)部署

在軟件開發(fā)中經(jīng)常會提到持續(xù)集成(Continuous Integration)和持續(xù)部署(Continuous Delivery),那么它們的真正意思是什么呢?

  • 『持續(xù)集成』:當(dāng)我們向代碼倉庫提交代碼后,可以對變更進(jìn)行監(jiān)測,進(jìn)而實(shí)現(xiàn)自動拉取代碼、構(gòu)建、測試等操作。試想一下,如果這些操作都手動進(jìn)行,效率是非常低的,因而提出了持續(xù)集成。
  • 『持續(xù)部署』:持續(xù)集成幫助我們實(shí)現(xiàn)了對項(xiàng)目的自動化構(gòu)建、測試等工作,我們知道,項(xiàng)目最終需要部署到服務(wù)器上,在不借助Jenkins的情況下,需要我們手動將項(xiàng)目部署到服務(wù)器上,如果項(xiàng)目數(shù)量多,就會容易出現(xiàn)錯誤且效率低,而且特別麻煩,因而提出了持續(xù)部署,來實(shí)現(xiàn)對項(xiàng)目的自動化部署。

同樣滴,Jenkins借助插件,例如Maven、Git、Pipeline、SSH等來實(shí)現(xiàn)這一系列的功能。

3.Docker安裝Jenkins

系統(tǒng)環(huán)境:ubuntu20.04 + Docker20.10.8

3.1 拉取鏡像

docker pull jenkins/jenkins:lts

3.2 啟動容器

docker run -d --restart=always --name jenkins -uroot -p 8080:8080 -p 50000:50000 -v /home/docker/jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker jenkins/jenkins:lts

說明:這里我們掛載了宿主機(jī)的/var/run/docker.sock以及/usr/bin/docker,是因?yàn)?,我們后續(xù)需要在容器內(nèi)執(zhí)行docker相關(guān)命令。

3.3 Jenkins初體驗(yàn)

訪問http://192.168.110.101:8080,會出現(xiàn)如下界面:

提示我們可以去容器的/var/jenkins_home/secrets/initialAdminPassword中查看登錄密碼,我們一開始已經(jīng)將/var/jenkins_home掛載到宿主機(jī)的/home/docker/jenkins,因此我們直接去宿主機(jī)的對應(yīng)目錄進(jìn)行查看。

# 查看初始化登錄密碼
cat /home/docker/jenkins/secrets/initialAdminPassword

然后將密碼復(fù)制粘貼到輸入框,會進(jìn)入如下界面:

不得不說,這里Jenkins的選項(xiàng)對于新手小白還是挺友好的,我們選擇安裝推薦的插件,至于后面我們所要用到的功能,再去插件市場按需安裝即可。

可以看到,Jenkins為我們安裝了Git、Pipeline等常用插件,因?yàn)镴enkins默認(rèn)使用的是國外的安裝源,咱們耐心等待一下。??

經(jīng)歷過漫長的等待,終于,終于,這個步驟是走完了,但還是有些插件下載失敗了,后續(xù)我們再手動安裝吧。不得不說,這下載速度著實(shí)有點(diǎn)慢?。。?!

這里我們就不創(chuàng)建新用戶了,使用admin賬戶繼續(xù)。

點(diǎn)擊保存并完成。提示部分插件需要重啟才會生效。

終于,它來了。小伙伴們上號?。。?/p>

主界面如下:

這里我們先修改一下admin賬戶的登錄密碼,否則只能使用安裝時提到的初始化密碼。當(dāng)然,如果你在前面的步驟中創(chuàng)建了新的管理員用戶,就可以忽略該步驟。

4.Jenkins插件安裝、環(huán)境配置

4.1 插件安裝

我們這里是部署一個maven的單模塊項(xiàng)目,同時需要用到Gitee的WebHook,因此需要下載Maven、Gitee相關(guān)的插件,所以在Jenkins首頁選擇系統(tǒng)管理—》插件管理,搜索進(jìn)行下載即可。

下載完成后,點(diǎn)擊返回首頁。

4.2 配置maven

在Jenkins首頁點(diǎn)擊系統(tǒng)管理—》全局工具配置。在這里我們可以對Maven、JDK等要使用的環(huán)境進(jìn)行配置。我這里只對Maven進(jìn)行了配置,JDK無需配置,因?yàn)槲覀兒罄m(xù)在將項(xiàng)目打包成Docker鏡像時,會將JRE運(yùn)行環(huán)境一起打包。

在Maven配置這里,使用默認(rèn)Maven配置即可。由于我們的Jenkins運(yùn)行在Docker之中,因此需要在容器中安裝Maven,這里我們選擇自動安裝(會安裝到/var/jenkins_home/tools目錄下),也可以自行下載,然后將文件放在該目錄下即可。

4.3 添加憑據(jù)

由于需要使用Git從Gitee倉庫拉取代碼,我們這里添加一個Gitee的SSH key。Jenkins首頁—》系統(tǒng)管理—》Credentials,這里應(yīng)該是Jenkins的漢化插件沒有漢化完全,不過無傷大雅。

1)添加憑據(jù)頁面

2)創(chuàng)建SSH key

Gitee官方提供了添加生成SSH key的方法:https://gitee.com/help/articles/4181,總結(jié)命令如下:

# 生成密鑰,一直按回車即可。
ssh-keygen -t ed25519 -C "jenkins@example.com"
# 查看公鑰
cat ~/.ssh/id_ed25519.pub
# 將host添加到SSH信任列表
ssh -T git@gitee.com

接下來我們就進(jìn)入Jenkins容器,執(zhí)行這些命令。

docker exec -it jenkins bash

3)Gitee設(shè)置中添加SSH key

這時候我們再回過頭來,將私鑰添加到憑據(jù)中,一個憑據(jù)就添加好了。

5.Jenkins自動化部署Maven單模塊項(xiàng)目

5.1 準(zhǔn)備Maven項(xiàng)目

準(zhǔn)備一個Maven項(xiàng)目,我這里是一個簡單的基于SpringBoot的Web項(xiàng)目。項(xiàng)目結(jié)構(gòu)如下:

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.7</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.stone</groupId>
    <artifactId>jenkins-test</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <description>Jenkins-test</description>
    <properties>
        <java.version>11</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.5.7</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <!--開啟分層構(gòu)建-->
                    <layers>
                        <enabled>true</enabled>
                    </layers>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Dockerfile

# 指定基礎(chǔ)鏡像,這是分階段構(gòu)建的前期階段
FROM openjdk:11-jre   as builder
# 執(zhí)行工作目錄
WORKDIR apps
# 配置參數(shù)
ARG JAR_FILE=target/*.jar
# 將編譯構(gòu)建得到的jar文件復(fù)制到鏡像空間中
COPY ${JAR_FILE} application.jar
# 通過工具spring-boot-jarmode-layertools從application.jar中提取拆分后的構(gòu)建結(jié)果
RUN java -Djarmode=layertools -jar application.jar extract
# 正式構(gòu)建鏡像
FROM openjdk:11-jre
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
WORKDIR apps
# 前一階段從jar中提取除了多個文件,這里分別執(zhí)行COPY命令復(fù)制到鏡像空間中,每次COPY都是一個layer
COPY --from=builder apps/dependencies/ ./
COPY --from=builder apps/spring-boot-loader/ ./
COPY --from=builder apps/snapshot-dependencies/ ./
COPY --from=builder apps/application/ ./
ENTRYPOINT java ${JAVA_OPTS} org.springframework.boot.loader.JarLauncher

5.2 準(zhǔn)備外網(wǎng)映射

由于我這里是在虛擬機(jī)上搭建的環(huán)境,為了能夠在更新倉庫代碼時通過WebHook觸發(fā)自動構(gòu)建,需要進(jìn)行外網(wǎng)映射,使用云服務(wù)器的小伙伴可以忽略此步驟。

由于只需要達(dá)到演示的效果,我這里使用的是免費(fèi)的ngrok。下載地址:https://ngrok.com/download

# 安裝snapd,才能使用snap安裝ngrok
apt install -y snapd
# 安裝ngrok
snap install ngrok

如下圖所示,表示已經(jīng)安裝成功。

這里需要注冊一個ngrok的賬號,才能獲得authtoken。我這里已經(jīng)注冊好了,直接執(zhí)行ngrok config add-authtoken xxx就行

# xxx為對應(yīng)的token
ngrok config add-authtoken xxx

現(xiàn)在我們將虛擬機(jī)服務(wù)器的8080端口映射出去。出現(xiàn)如下界面就表示映射成功。

ngrok http 8080

5.3 Jenkins任務(wù)配置

1)新建任務(wù)

Jenkins首頁點(diǎn)擊新建任務(wù),選擇構(gòu)建一個maven項(xiàng)目。

2)Git配置

3)Gitee的webhook配置

我這兒勾選的是當(dāng)倉庫有推送代碼事件時觸發(fā)自動構(gòu)建。

配置WebHook密碼。

Gitee中添加WebHook。

4)編譯、打包

5)編譯、打包后執(zhí)行后置腳本

我這兒準(zhǔn)備了一個deploy.sh,并放在容器的/var/jenkins_home/sh目錄下

deploy.sh

#!/bin/bash
# 服務(wù)名稱
SERVER_NAME=$1
# 鏡像tag
IMAGE_TAG=$2
# 鏡像名稱
IMAGE_NAME=$SERVER_NAME:$IMAGE_TAG
echo "------ 開始構(gòu)建鏡像:${SERVER_NAME} ------"
docker build -t ${IMAGE_NAME} .
echo "------ 鏡像構(gòu)建結(jié)束:${IMAGE_NAME} ------"
if [[ -n $(docker ps -q -f "name=^${SERVER_NAME}$") ]];then
    echo "------ 容器正在運(yùn)行:${SERVER_NAME} ------"
    echo "------ 停止容器:$SERVER_NAME ------"
    docker stop $SERVER_NAME
    echo "------ 刪除容器:$SERVER_NAME ------"
    docker rm $SERVER_NAME
else
    echo "------ 容器未在運(yùn)行:${SERVER_NAME} ------"
    echo "------ 刪除容器:$SERVER_NAME ------"
    docker rm $SERVER_NAME
fi
echo "------ 開始運(yùn)行容器:$SERVER_NAME ------"
docker run -d --name $SERVER_NAME -p 9090:9090 ${IMAGE_NAME}
echo "------ 清理虛懸鏡像 ------"
if [[ -n $(docker images | grep "none" | awk '{print $3}') ]];then
    docker rmi -f $(docker images | grep "none" | awk '{print $3}')
fi

5.4 手動部署

1)點(diǎn)擊立即構(gòu)建

2)查看日志

拉取代碼。

編譯、打包。

構(gòu)建鏡像、運(yùn)行容器。

查看運(yùn)行中的容器,jenkins-maven已成功運(yùn)行。

5.5 自動部署

查看日志,拉取到最新的commit信息。

到此這篇關(guān)于Docker+Jenkins+Gitee自動化部署maven項(xiàng)目的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Docker Jenkins Gitee maven內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Docker容器如何開啟特權(quán)模式

    Docker容器如何開啟特權(quán)模式

    文章主要解決Docker容器中無法使用systemctl命令的問題,其原因在于大部分的系統(tǒng)鏡像移除了init軟件包,導(dǎo)致鏡像中沒有/sbin/init文件,解決方法是通過編寫Dockerfile文件修改鏡像,構(gòu)建新的鏡像,并運(yùn)行新構(gòu)建的鏡像,需要注意的是,開啟特權(quán)模式雖然方便,但可能存在安全風(fēng)險
    2024-10-10
  • CentOS修改docker鏡像存儲位置并進(jìn)行數(shù)據(jù)遷移的操作方法

    CentOS修改docker鏡像存儲位置并進(jìn)行數(shù)據(jù)遷移的操作方法

    本文詳細(xì)介紹了在CentOS上修改Docker鏡像存儲位置并進(jìn)行數(shù)據(jù)遷移的步驟,包括停止Docker服務(wù)、創(chuàng)建新的存儲目錄、復(fù)制現(xiàn)有數(shù)據(jù)、修改Docker配置、重啟Docker服務(wù)、驗(yàn)證配置、清理舊數(shù)據(jù)(可選)以及檢查容器和鏡像,感興趣的朋友一起看看吧
    2025-01-01
  • docker-compose網(wǎng)絡(luò)配置-?IP?主機(jī)名?hosts配置方式

    docker-compose網(wǎng)絡(luò)配置-?IP?主機(jī)名?hosts配置方式

    這篇文章主要介紹了docker-compose網(wǎng)絡(luò)配置-?IP?主機(jī)名?hosts配置方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • docker 查看進(jìn)程, 內(nèi)存, cup消耗的情況

    docker 查看進(jìn)程, 內(nèi)存, cup消耗的情況

    這篇文章主要介紹了docker 查看進(jìn)程, 內(nèi)存, cup消耗的情況,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • docker compose入門helloworld的詳細(xì)過程

    docker compose入門helloworld的詳細(xì)過程

    docker-compose是基于docker的,所以我們需要先安裝docker才能使用docker-compose,接下來通過本文給大家介紹docker compose入門helloworld的過程,一起看看吧
    2021-09-09
  • docker覆蓋鏡像默認(rèn)命令之docker?entrypoint詳解

    docker覆蓋鏡像默認(rèn)命令之docker?entrypoint詳解

    entrypoint命令就是覆蓋ENTRYPOINT命令的,本文給大家介紹了docker覆蓋鏡像默認(rèn)命令之docker?entrypoint的相關(guān)知識,需要的朋友可以參考下
    2023-10-10
  • 如何通過Dockerfile 創(chuàng)建 kali-novnc

    如何通過Dockerfile 創(chuàng)建 kali-novnc

    這篇文章主要介紹了如何通過Dockerfile 創(chuàng)建 kali-novnc,在Dockerfile所在目錄運(yùn)行相關(guān)命令操作即可完成,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • Docker 容器互聯(lián)互通的實(shí)現(xiàn)方法

    Docker 容器互聯(lián)互通的實(shí)現(xiàn)方法

    這篇文章主要介紹了Docker 容器互聯(lián)互通,本文講解不同網(wǎng)絡(luò)下的容器可以通過加入同一個docker網(wǎng)絡(luò),來訪問該docker網(wǎng)絡(luò)下的容器,并且既可以通過容器ip也可以通過容器名連接,非常方便,需要的朋友可以參考下
    2022-10-10
  • 深入了解docker(docker鏡像、容器、倉庫的基本概念)

    深入了解docker(docker鏡像、容器、倉庫的基本概念)

    本文重點(diǎn)給大家介紹docker鏡像、容器、倉庫的基本概念,感興趣的朋友跟著小編一起學(xué)習(xí)吧
    2016-10-10
  • docker部署mysql+phpmyadmin的3種方式

    docker部署mysql+phpmyadmin的3種方式

    本文介紹了三種訪問phpmyadmin的方法:link、network和docker-compose.yml,docker-compose.yml文件內(nèi)容為:打開瀏覽器,輸入localhost:8080即可訪問phpmyadmin界面,帳號密碼都是root
    2024-12-12

最新評論