Docker安裝Jenkins+Shell腳本自動化部署項目

2021-12-25 java版web項目

Jenkins是一款開源的CI&CD軟體, 提供超過1000個插件來支持構建、部署、自動化, 滿足任何項目的需要。

Jenkins

Jenkins基於Java環境,可以部署在windows/Mac OS/linux上,通過其網頁可視化界面可以輕鬆操作Jenkins。

接下我們會分成三部分來講解:

docker安裝Jenkins

我們在linux環境使用Docker安裝一個Jenkins,你需要事先安裝Docker和Docker-compose,如果不知道怎麼安裝可以看我的安裝教程文章。

1.遠程連接linux伺服器,創建docker在主機的jenkins數據映射目錄

cd /opt
mkdir jenkins
cd jenkins
mkdir home

2.(可選)給數據映射目錄授權docker用戶訪問權限,不然docker啟動jenkins時會報權限的錯。如果指定了容器內以root用戶運行的話,可以不用執行授權命令。

sudo chown -R 1000 home

jenkins容器內部的用戶id是1000,而主機上home目默認是root用戶才能訪問,需要授權給jenkins容器用戶。-R 代表home目錄及其子目錄一起授權。

3.我們用docker-compose安裝,當然你也可以用docker run的方式,創建一個docker-compose.yml文件。

version: "3"
services:
  jenkins:
    image: jenkins/jenkins:lts
    ports:
      - 8080:8080
      - 50000:50000
    restart: "always"
    container_name: jenkins
    environment:
      JAVA_OPTS: -Duser.timezone=Asia/Shanghai
    volumes:
      - /opt/jenkins/home:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/bin/docker:/usr/bin/docker
    privileged: true
    user: root

官網中文文檔與英文文檔不一致,不要使用中文文檔中推薦的jenkinsci/blueocean鏡像,使用它構建node程序會出現問題,因為我的項目需要同時構建前端vue項目和後端springboot項目,所以我這裡使用jenkins/jenkins:lts版本鏡像。

(可選)最後一行的user:root指的是指定容器內部使用root帳號,如果加了這行可以把第二步省略。可以通過docker exec -t jenkins bash命令進入到容器內部然後運行whoami命令查看當前用戶。

注意其中我們映射了一個容器內的/var/jenkins_home目錄,這是作為Jenkins的主目錄,裡面會存放Jekins的各種配置和構建的項目工作空間,後面需要用到這個對應的主機映射路徑。映射的埠可以自行修改。

4.啟動Jenkins容器

userdocker-compose up -d

安裝就成功了,你可能看著很簡單,其實這一步是最多坑的地方,第二步中的映射目錄授權很多人沒做導致報錯排查了很久,docker-compose配置文件裡有映射了幾個目錄如果沒有後面也會讓你頭疼的。

Jenkins首次登錄配置

1.首次登陸,解鎖jenkins,啟動完成後打開瀏覽器 ip:8080 。

解鎖Jenkins

獲取密碼,在伺服器控制臺運行以下命令查看密碼,注意這裡的目錄是主機的目錄/opt/jenkins/home,對應的是容器內的/var/jenkins_home目錄。

cat /opt/jenkins/home/secrets/initialAdminPassword

2.自定義插件

不了解自己需要的插件的話選擇安裝推薦的插件,如果你是學習目的的話可以選擇插件來安裝。

自定義插件

推薦安裝插件界面

推薦安裝插件

選擇插件安裝頁面

選擇插件安裝

安裝插件的過程比較久,慢慢等待。

3.創建一個管理員用戶

安裝完插件會出現創建管理員用戶的界面。填寫用戶名和密碼以及郵件地址即可。

創建一個管理員用戶

4.進入jenkins首頁

默認有一些地方是英文的,你可以伺服器重啟下jenkins容器就可以變成中文了。

Jenkins首頁

點擊左側的Manage Jenkins菜單,中文叫系統管理。下圖紅框中的三個分別是系統配置、全局工具管理、插件管理。Security部分可以管理憑據(新建項目時會講到)。以後想裝插件、配置用戶、配置Jenkins的話都在這裡操作。

系統管理

構建一個項目完成自動部署

1.新建項目

點擊左側新建Item菜單新建一個項目。

新建項目

輸入任務(項目)名稱,任務類型選擇Freestrle project,中文的話叫自由風格的項目。

創建成功後可以看到任務裡有很多的配置,一般我們配置源碼管理(你的項目git路徑、分支和帳號)、構建(寫構建shell腳本)就可以了。

項目配置頁面

2.源碼管理配置

我的項目在gitlab上,使用的是git,所以我們選擇Git,輸入項目的git地址。

配置git地址

如果你的git倉庫是私有的,會提示無法連接倉庫,如下圖。

私有git倉庫

這時我們就需要添加一個憑據,可以直接點git地址輸入框下方的添加按鈕,選擇Jenkins默認域添加一個憑據。這一步也可以在系統管理裡事先設置好。

添加憑據

在添加憑據的地方輸入你的git上的帳戶名和密碼點擊添加即可。

添加憑據

指定分支,默認是 */master,這裡我改成 */develop 。

指定分支

源碼管理部分就可以了,接下去是設置構建步驟,我們跳到構建步驟。

3.構建配置

我們滾動到構建步驟部分,點擊增加構建步驟,在下拉框中選擇執行shell腳本。

執行shell腳本

shell腳本根據你的項目情況而定,我這裡給出一個我的項目的腳本參考,因為我是同時構建前後端項目,所以比較複雜一點。注意這個shell腳本運行的當前路徑是主機上的 /opt/jenkins/home/workspace/項目名 目錄, 注意/opt/jenkins/home 目錄是我對應jenkins容器裡的/var/jenkins_home 目錄。可以通過在腳本裡寫個$(pwd)然後構建日誌中查看具體是什麼。需要一定的shell知識,當然如果你不用shell腳本也是可以使用其他方式構建可以自行查閱。

dir=$(pwd)
echo "jenkins容器項目所在路徑:"
echo $dir
echo "主機路徑:"
real_dir="/opt/jenkins/home/"${dir#'/var/jenkins_home/'}
echo $real_dir

echo "開始構建"

echo "創建前端代碼打包腳本install.sh"
cat>web/install.sh<<EOF
sed -i "s@http://dl-cdn.alpinelinux.org/@https://repo.huaweicloud.com/@g" /etc/apk/repositories
apk update
apk add yarn
yarn config set registry https://registry.npm.taobao.org/
yarn && yarn build:dev
EOF

echo "打包前端代碼生成dist目錄"
docker run --rm --net=host -v ${real_dir}/web:/web -v /root/.cache/yarn/cmp:/usr/local/share/.cache/yarn -w /web node:10-alpine3.11 sh install.sh

echo "拷貝前端dist目錄到後端項目的public目錄,用於與後端公用埠,解決跨域問題"
mkdir -p ./src/main/resources/public
cp -r ./web/dist/* ./src/main/resources/public

echo "後端構建"
mkdir -p /root/.m2

echo "後端mvn打包jar文件"
docker run --rm -v /root/.m2:/root/.m2 -v ${real_dir}:/cmp -w /cmp maven mvn clean install -DskipTests

echo "複製jar文件到指定docker目錄"
mkdir -p docker && cp target/cmp-0.0.1-SNAPSHOT.jar ./docker && cd docker

echo "在指定docker目錄創建Dockerfile文件用於生成docker容器"
cat>Dockerfile<<EOF
FROM openjdk:8u242-jdk
COPY cmp-0.0.1-SNAPSHOT.jar /
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ENTRYPOINT ["java", "-jar", "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5008", "/cmp-0.0.1-SNAPSHOT.jar"]
EOF

echo "清理已有容器及鏡像資源"
container="Jenkins-project01"
image=${container}

if docker ps | grep ${container} ;then
    docker stop ${container}
fi

if docker ps -a | grep ${container};then
    docker rm ${container}
fi

if docker images | grep ${image};then
    docker rmi ${image}
fi

echo "鏡像製作"
docker build -t ${image} .
echo "容器運行"
docker run -d --restart=always --name ${container} -v /var/logs:/var/logs -p 8888:8888  ${image} --spring.profiles.active=dev -Duser.timezone=GMT+8

4.構建項目查看控制臺信息

在任務頁面點擊立即構建,然後可以在下方的構建歷史中點擊右側時間位置的小箭頭打開控制臺輸出信息。

查看控制臺輸出

控制臺內容

好了,以上就是Jenkins的全部內容了。

相關焦點

  • 手摸手教你docker+jenkins+gitlab部署你的Vue項目
    學習了一周的CICD,踩了很多坑,都是淚,特此記錄一下整個過程,本次項目產出效果是,git push的時候自動化直接部署到伺服器上,一下是整個大致流程:image.png1.本地代碼push到gitlab2.gitlab通過webhook通知到jenkins3.jenkins
  • Jenkins-GitHub自動化部署vue項目
    QncsEND RSA PRIVATE KEY貌似現在用不到這個key。/usr/local/bin///測試npm -vnode -vv10.15.36.4.1//為啥是這2個版本?覆蓋之前的版本就好了。
  • Gogs+Jenkins+Docker 自動化部署.NetCore
    表示安裝成功sudo docker run hello-world不同的系統安裝方式可以查閱 docker 官方安裝說明Gogs安裝Gogs 是一款用 Go 語言開發的輕量級極易搭建的自助 Git 服務。選擇 Gogs 主要因為它相對於 Gitlab 動則幾個G的內用暫用率來說輕太多了。
  • Jenkins自動化部署項目 你值得一讀
    它可以在代碼上傳倉庫(如github,gitee,gitlab)後,在jenkins(一個網站界面)中通過獲取代碼倉庫中最新代碼,進行自動化部署,而省去手動打包、上傳伺服器、部署這一系列步驟,非常方便。
  • docker+Jenkins+nginx實現前端自動部署詳細教程
    hexo生成的靜態的html頁面,所以我只需要在伺服器配置一個Nginx服務,然後再把我的資源文件扔上去就行但是,但是,如果僅僅是這樣來部署,那也太簡單了,不如讓它更加的自動化所以我想要每次我對文件更改完成後讓伺服器自動幫我完成部署的事情,
  • netcore編程之後面對不習慣的xshell黑屏部署,是時候使用jenkins自動化發布工具了
    現如今你的項目需要在linux上部署,可惜的是再也沒有什麼可視化的界面給你,全在xshell上操作,如果在xshell上部署個位數的項目大家或許還可以接受,如果要部署10+以上的服務呢,估計很多人在xshell上敲的頭都大了。。。這就是為什麼docker會有dockerfile,會有容器編排的docker-compose,所以找一款自動化發布工具迫在眉睫了。
  • Jenkins持續集成平臺搭建及項目部署
    安裝Jenkins1.獲取Jenkins安裝包下載地址:https://jenkins.io/zh/download/安裝文件:jenkins-2.323-1.1.noarch.rpm= "jenkins-demo" //鏡像版本號 def tag = "latest" //應用埠 def port = "10086" //部署腳本地址 def shell_url = "/usr/local/java/jenkins_shell/deploy.sh" try{    node {        stage
  • Jenkins 自動化部署 Java 項目,厲害~
    3.maven客戶端,因一般java程序是由maven工程,需要maven打包,當然也有其他打包方式,如:gradle以上是自動化部署java程序jenkins需要的基本環境,請自己提前安裝好,下面著重講解Jenkins的安裝部署配置。
  • jenkins學習5-jenkins拉取git倉庫代碼,執行python自動化腳本
    前言python自動化的腳本開發完成後需提交到git代碼倉庫,接下來就是用Jenkins拉取代碼去構建自動化代碼了git源碼管理代碼上傳
  • 使用Jenkins實現自動化構建!
    提交的代碼不僅包括應用程式,還包括構建鏡像的腳本、測試用例的腳本和部署的編排腳本等。其中,各個步驟的操作可以使用插件或直接在命令行中使用各種工具來完成。例如,拉取項目代碼會用到Git插件;打包項目會用到 Maven;構建鏡像和應用部署可直接通過命令行使用Docker或docker-compose;集成測試可通過命令行執行由Selenium、JMeter等生成的腳本。
  • 手把手 docker 從零搭建 jenkins 伺服器
    在項目非常趕的情況下,我每天還要抽半天時間去排查 jenkins 上的問題。所以決定在我們前端伺服器上搭建個 jenkins 給測試部署。並部署到前端伺服器上。文章是邊操作邊寫出來的,踩遍了坑。不知道大家會不會也遇到這些問題。反正我都把解決步驟寫在裡面了。本文主要內容是介紹 jenkins 的搭建與使用。
  • Jenkins與Docker的自動化CI/CD實戰
    Jenkins也是一個跨平臺的,大多數主流的平臺都支持,而且安裝很簡單,我們這裡以部署war包方式安裝它。官網下載地址:https://jenkins.io/download/如圖點擊下載最後一個Generic Java package(war):
  • .Net Core 自動化部署:使用jenkins部署應用
    安裝docker版jenkins因為 jenkins的 docker版本本身沒有 dotnetcore的環境,所以我們需要先自己動手製作下包含
  • 從零開始搭建 Jenkins+Docker 自動化集成環境
    Jenkins可以幫你構建一個自動化的持續集成環境,你可以使用它來「自動化」編譯、打包、分發部署你的應用,它兼容 ant、maven、gradle 等多種第三方構建工具,同時跟 svn、git 能無縫集成,也支持直接與知名原始碼託管網站,比如 github、bitbucket 直接集成。
  • Jenkins自動化部署入門詳細教程
    3.maven客戶端,因一般java程序是由maven工程,需要maven打包,當然也有其他打包方式,如:gradle  以上是自動化部署java程序jenkins需要的基本環境,請自己提前安裝好,下面著重講解Jenkins的安裝部署配置。
  • 使用docker安裝jenkins
    clay-wangzhi/shell/raw/master/repo_replace.sh" | bash2.安裝配置Docker使用官方腳本安裝 Dockercurl -fsSL "https://get.docker.com
  • 一文詳解 Jenkins 與 Docker 的自動化 CI/CD 實戰
    Harbor 鏡像倉庫之前部署過,此處省略,參考這裡:部署Harbor安裝Docker需要安裝Docker及配置Java環鏡。/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker.repo安裝 Docker CE:# yum install -y docker-ce啟動並開機啟動:
  • Shell腳本結合Git實現增量項目部署
    普通人用jenkins全量挺好的,但是代碼過多時候就比較麻煩,而且jenkins一般也要配合腳本使用更加符合業務。作者:CatalpaFlathttps://juejin.im/post/5cf0ed996fb9a07eab68674f應用部署是開發、測試、上線必須面對的一個過程,尤其是微服務架構的出現,運維部署從單體的部署逐漸脫離出,並且越顯複雜。
  • 我常用的自動化部署技巧,賊好用,推薦給大家!
    SpringBoot+Jenkins自動化部署技巧,遠程部署同樣適用,附通用自動化腳本!
  • 以 docker 方式運行 jenkins
    -v 參數掛載了宿主機一個指定目錄到 /var/jenkins_home ,相當於設置了自定義的 JENKINS_HOMEjenkins 容器中添加 git, maven 等組件一般我們使用jenkins的時候,需要用到 git, jdk, maven 等等的組件,在使用 docker-jenkins 的時候,可以用 -v 參數掛載到 /usr/bin 目錄中,並不需要再在鏡像中進行安裝