1、jenkins配置
由於公司使用的是內部網路,沒有開啟網際網路,所以在進行jenkins構建的時候,沒法下載對應外掛,剛開始使用映象的方式製作了jenkins映象,
但是jenkins映象內部又缺少maven等外掛,弄了許久還是需要下載外掛;感覺有些麻煩,後面直接用之前外網的一個jenkins進行替代即可。jenkins配置
主要包含2部分:1、jenkins的環境變數配置及jenkins啟動war包 2、jenkins對應的外掛及名稱空間配置。
1.1、jenkins設定環境變數
在我們安裝jenkins之前,需要知道關於Jenkins怎樣儲存資料。事實上,不管你的Jenkins的war包村建存放在哪裡,jenkins都會把其所有重要資料存放在一個專門使用者、隔離的、成為Jenkins主目錄的目錄下。在這裡,Jenkins儲存關於構建伺服器配置資訊、構建作業、構建產物和其他有用的資訊,當然包括你安裝了任何外掛。這個目錄會消耗大量磁碟空間。
預設情況下,Jenkins主目錄被稱為.jenkins,會被放在你的當前使用者主目錄下。例如,假如你再window7下執行一個機器,且使用者名稱是"tom",主目錄會在:c:\Users\tom.jenkins下,在linux下,主目錄可能在:.home/tom/.jenkins等。
你可以使用定義JENKINS_HOME環境變數來強行使jenkins使用一個不同目錄作為其主目錄。
我們一般透過編寫一個shell指令碼實現,比如以下:主目錄:/data/jenkins/data
配置環境變數:/etc/profile
export JAVA_HOME=/root/software/jdk1.8.0_192
CLASSPATH=.:$JAVA_HOME/lib/
export JENKINS_BASE=/data/jenkins
export JENKINS_HOME=/data/jenkins/data
export PATH=$PATH:$JENKINS_BASE:$JENKINS_HOME:$JAVA_HOME/bin
1.2、外掛複製到JENKINS_HOME
將另一個已經安裝好外掛的機器上的JENKINS_HOME下的除workspace檔案複製到當前機器的JENKINS_HOME下。
1.3、啟動程式
將jenkins.war也複製到此目錄下,總體目錄結構及檔案如下:
對應啟動指令碼如下:jenkins_start.sh
#!/bin/bash
nohup java -jar jenkins.war --httpPort=8008 >jenkins.out 2>&1 &
1.4、系統訪問
系統輸入:
http://ip:8008
系統訪問正常:
2、jenkins+docker進行微服務後端構建
2.1、映象製作
映象打包製作的話,一般我們有兩種方式。方式一:使用Maven外掛為SpringBoot應用構建Docker映象。這種情況主要是在pom.xml檔案中新增maven的docker映象打包依賴:
在應用的pom.xml檔案中新增docker-maven-plugin的依賴:
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.1.0</version>
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<imageName>mall-tiny/${project.artifactId}:${project.version}</imageName>
<dockerHost>http://192.168.3.101:2375</dockerHost>
<baseImage>java:8</baseImage>
<entryPoint>["java", "-jar","/${project.build.finalName}.jar"]
</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
相關配置說明:
- executions.execution.phase:此處配置了在maven打包應用時構建docker映象;
- imageName:用於指定映象名稱,mall-tiny是倉庫名稱,${project.artifactId}為映象名稱,${project.version}為倉庫名稱;
- dockerHost:打包後上傳到的docker伺服器地址;
- baseImage:該應用所依賴的基礎映象,此處為java;
- entryPoint:docker容器啟動時執行的命令;
- resources.resource.targetPath:將打包後的資原始檔複製到該目錄;
- resources.resource.directory:需要複製的檔案所在目錄,maven打包的應用jar包儲存在target目錄下面;
resources.resource.include:需要複製的檔案,打包好的應用jar包。
另一種方式是透過構建shell指令碼透過jenkins配置在伺服器上打映象。在此使用第二種方式,以網管為例,主要包括Dockerfile跟對應的構建指令碼.sh檔案。
2Dockerfile
我們以微服務中的閘道器為例: Dockerfile如下:
FROM cytomine/java8:latest
# 準備環境
ENV LANGUAGE=zh_CN.UTF-8
ENV TZ=Asia/Shanghai
RUN mkdir /apps/
WORKDIR /apps/
ADD target/gtc-gateway-2.3.0.jar app.jar
ENTRYPOINT ["java","-jar","app.jar"]
構建指令碼
對應的閘道器的指令碼如下:
#!/usr/bin/env bash
app_name='gtc-gateway'
images_name='gtc-gateway:1.0'
echo '----WORKSPACE----'
echo ${WORKSPACE}
cd ${app_name}
# 啟動容器
docker stop ${app_name}
echo '----stop container----'
docker rm ${app_name}
echo '----rm container----'
docker rmi `docker images | grep ${app_name} | awk '{print $3}'`
echo '----rm none images----'
docker build -t ${images_name} .
echo '----build images----'
docker run -p 30080:8080 --name ${app_name} -d ${images_name}
echo '----start container----'
對應的位置
Dokcerfile跟構建指令碼在同一目錄下,便於我們後面透過jenkins的指令碼來構建應用。
2.2、jenkins服務構建視覺化配置
建立item
General
勾選:This project is parameterized->新增引數
Git Paramemter:Name:branch Parameter Type:Branch or Tag Default Value:origin/dev
原始碼管理
Repositories
`Repository URL:填寫對應的倉庫地址
Credentials:新增使用者名稱/密碼認證 `
Branches to build:${branch}-使用上面General定義的變數
如果此時出現如下錯誤:(我們的使用者名稱跟密碼是沒有問題的)
原因分析:這是由於git客戶端版本過低造成的!或者未安裝git
Jenkins本機預設使用"yum install -y git" 安裝的git版本比較低,應該自行安裝更高版本的git。
檢視GI版本
git --version
如果存在,解除安裝低版本
yum remove -y git
我這裡是系統沒有安裝git,自己安裝完git之後即可。
Pre Steps(增加構建步驟)
Invoke top-level Maven targets
因為後端使用maven的配置,所以此時需要配置maven進行構建,先構建共有的包到maven倉庫
Maven 版本:MAVEN_HOME
目標:clean install -Dmaven.test.skip=true -Ptest
POM:${WORKSPACE}/gtc-common/pom.xml
因為需要將clean完package之後的包加入本地maven倉庫 所以使用了install
Invoke top-level Maven targets
構建自身的包
Maven 版本:MAVEN_HOME
目標:clean package -Ptest
POM:${WORKSPACE}/gtc-gateway/pom.xml
Execute shell
命令
sudo -i
chmod 777 /data/jenkins/data/workspace/gtc-gateway/gtc-gateway/gtc-gateway.sh
/data/jenkins/data/workspace/gtc-gateway/gtc-gateway/gtc-gateway.sh
3、jenkins進行微服務前端構建
前端構建前:我們需要先下載安裝nginx:nginx下載地址:https://mirrors.huaweicloud.c...
首先我們需要在我們安裝jenkins的伺服器上安裝node,地址:
https://nodejs.org/download/release/v14.18.2/
建立item
前端構建就是普通的服務構建;構建一個自由風格的專案
General
勾選:This project is parameterized->新增引數
Git Paramemter:Name:branch Parameter Type:Branch or Tag Default Value:origin/dev
Choice Paramemter: 名稱:env 選項:dev stage prod 描述:前端環境
String Paramemter: 名稱:deploy_dir 預設值:/data/nginx/www/html/admin 描述:前端部署位置
原始碼管理
填寫響應的地址
Repositories
`Repository URL:填寫對應的倉庫地址
Credentials:新增使用者名稱/密碼認證 `
Branches to build:${branch}-使用上面General定義的變數
構建
第一個 Execute shell:
pwd
cd gtc-system-ui
pwd
echo "${deploy_dir}"
echo "env"
echo "${env}"
sudo -i
pwd
npm config get registry
npm install
npm run build:${env}
pwd
第二個 Execute shell:
if [ -d "${deploy_dir}" ];then rm -rf "${deploy_dir}"; fi;
mkdir -p ${deploy_dir}
cp -r ${WORKSPACE}/gtc-system-ui/dist/* ${deploy_dir}/
然後我們就可以構建,如下所示:
問題
如果在構建過程中出現如下問題:
/tmp/jenkins11995557596560651774.sh:行9: npm: 未找到命令
解決方式:我們在jenkins中配置環境變數PATH