jenkins+gitlab+docker持續整合部署maven專案
1.環境準備:
我在vmware開了三臺ubuntu虛擬機器:
192.168.1.101 安裝jenkins,jdk1.8,maven3.5.4,安裝git
192.168.1.102 安裝gitlab
192.168.1.103 安裝docker
然後將101上的id_rsa.pub新增到gitlab的sshkey中,同時授權101,102主機拉取103的gitlab倉庫
ssh-keygen #會在~/.ssh目錄下生成id_rsa和id_rsa.pub,分別是私匙和公匙 最後三臺機器都執行,公私匙都是會用到的
ssh-copy-id root@192.168.1.102 #101執行
ssh-copy-id root@192.168.1.102 #103執行
隨意在101一個資料夾clone一個開源的部落格程式碼用作測試:
git clone https://github.com/b3log/solo.git
然後將這個提交到我們的gitlab私有倉庫
git remote add origin ssh://git@192.168.1.102:2222/liwd/solo.git #ssh://git@192.168.1.102:2222/liwd/solo.git是我的私人倉庫,這裡要換成自己的
git add .
git commit -m "all"
git push origin master
2.配置jenkins
注意要提前下載Git Parameter Plug-In和ssh的jenkins外掛,然後
系統管理—-全域性工具配置:
- setting.xml和jdk的配置,配置為你安裝的相應目錄哦
- maven配置
-
系統管理–全域性配置
3.建立一個maven專案,沒有該選項需要下載jenkins的maven外掛
-丟棄舊的構建,只儲存5個,也可儲存任意個,自己合理配置即可
- 引數化構建,用來選擇程式碼的分支來構建不同的專案名
- 原始碼管理
- maven編譯
- 構建後操作
3.docker指令碼
在安裝docker那臺機器的/data/dockerfiles/scripts目錄下寫一個指令碼:
#!/bin/bash
############################################
# this script function is :
# deploy new docker container
#
# USER YYYY-MM-DD - ACTION
# junsansi 2016-01-25 - CREATED
#
############################################
parasnum=5
# function
help_msg()
{
cat << help
+----------------------------------------------------+
+ Error Cause:
+ you enter $# parameters
+ the total paramenter number must be $parasnum
+ 1st :DOCKER_NAME
+ 2nd :PROJECT_NAME
+ 3rd :PROJECT_VERSION
+ 4th :SOURCE_PORT
+ 5th :DESTINATION_PORT
+----------------------------------------------------+
help
}
# ----------------------------------------------------
# Check parameter number
# ----------------------------------------------------
if [ $# -ne ${parasnum} ]
then
help_msg
exit
fi
# ----------------------------------------------------
# Initialize the parameter.
# ----------------------------------------------------
DOCKER_NAME=$1
PROJECT_NAME=$2
PROJ_VERSION=$3
SPORT=$4
DPORT=$5
PROJ_VERSION=${PROJ_VERSION/"origin/"/""}
DOCKER_FILE="/data/dockerfiles/${DOCKER_NAME}/Dockerfile"
DOCKER_FILE_DIR=/data/dockerfiles/${DOCKER_NAME}
if [ ! -d ${DOCKER_FILE_DIR} ]; then
mkdir -p ${DOCKER_FILE_DIR}
fi
# ----------------------------------------------------
# check docker images
# ----------------------------------------------------
DOCKER_IMAGE=`/usr/bin/docker images | grep ${DOCKER_NAME} | awk -F ' ' '{print $3}'`
if [ -n "${DOCKER_IMAGE}" ]; then
# check docker container
for dc in `/usr/bin/docker ps -a | grep ${DOCKER_NAME} | awk -F " " '{print $1}'`
do
echo "Stop container: ${dc}"
/usr/bin/docker stop ${dc}
# delete while docker container was exists
echo "##Delete exists Container_Id: "${dc}
/usr/bin/docker rm ${dc}
done
# delete while docker image was exists
echo "##Delete exists Image: "${DOCKER_IMAGE}
/usr/bin/docker rmi ${DOCKER_IMAGE}
fi
echo ""
# ----------------------------------------------------
# Init dockerfile
# ----------------------------------------------------
echo "**Init dockerfile start: "${DOCKER_FILE}
echo "FROM tomcat" > ${DOCKER_FILE}
echo 'MAINTAINER junsansi "junsansi@sina.com"' >> ${DOCKER_FILE}
echo "RUN rm -rf /usr/local/tomcat/webapps/ROOT" >> ${DOCKER_FILE}
echo "ADD *.war /usr/local/tomcat/webapps/ROOT.war" >> ${DOCKER_FILE}
echo "EXPOSE 8080" >> ${DOCKER_FILE}
echo "CMD /usr/local/tomcat/bin/startup.sh && tail -f /usr/local/tomcat/logs/catalina.out" >> ${DOCKER_FILE}
cat ${DOCKER_FILE}
echo "**Init dockerfile end."
# ----------------------------------------------------
# Build dockerfile
# ----------------------------------------------------
cd ${DOCKER_FILE_DIR}
rm *.war -rf
mv /data/dockerfiles/war/${DOCKER_NAME}/*.war ./
echo ""
echo "##Build dockerfile for "${DOCKER_NAME}
/usr/bin/docker build -t ${DOCKER_NAME}:${PROJ_VERSION} .
# ----------------------------------------------------
# Run docker container
# ----------------------------------------------------
echo ""
echo "##Running docker container: "${DOCKER_NAME}
/usr/bin/docker run --name ${DOCKER_NAME}_d1 -d -p ${SPORT}:${DPORT} ${DOCKER_NAME}:${PROJ_VERSION}
#/usr/bin/docker run ${cmd}
echo ""
寫過dockerfile和bash指令碼的都很容易看懂這個指令碼做了什麼:
拉取tomcat映象–將war包放到tomcat下的webapps目錄下–啟動映象,
jenkins全部佈置好後,直接點選專案buildwithparams,點選下面正在編譯的程式,然後再點選控制檯輸出會看到相關日誌,等到build success最後訪問192.168.1.103:11000即可訪問專案,然後會報錯,需要修改專案src/main/resources/latke.properties檔案:
serverHost=192.168.1.103
serverPort=11000
重新提交,然後重新buildwithparams,重新訪問192.168.1.103:11000
相關文章
- 持續整合持續部署持續交付_持續整合與持續部署之間的真正區別
- 前端專案基於GitLab-CI的持續整合/持續部署(CI/CD)前端Gitlab
- 持續整合、持續交付與持續部署
- 持續整合、持續部署、持續交付、持續釋出
- 持續整合指南:GitHubAction 自動構建+部署AspNetCore專案GithubNetCore
- 你真的懂持續整合、持續交付、持續部署嗎?!
- Docker+Gitlab+Jenkins+Maven程式碼持續整合與自動部署DockerGitlabJenkinsMaven
- 淺談持續整合(CI)、持續交付(CD)、持續部署(CD)
- 微服務下的持續整合-Jenkins自動化部署GitHub專案微服務JenkinsGithub
- 自動化專案Jenkins持續整合Jenkins
- 3分鐘瞭解清楚持續整合、持續交付、持續部署
- 對持續整合、 持續交付、持續部署和持續釋出的介紹
- Framework專案持續整合(jenkins)及集合SonarQubeFrameworkJenkins
- 前端er,Jenkins持續化整合Webpack專案前端JenkinsWeb
- Practice – iOS 專案持續整合實踐(一)iOS
- Practice - iOS 專案持續整合實踐(一)iOS
- 使用流水線外掛實現持續整合、持續部署
- 微服務容器部署與持續整合微服務
- CI/CD 持續整合部署實踐
- 簡單使用 持續整合jenkins 快速部署springboot和vue專案(面向開發者)JenkinsSpring BootVue
- 使用Jenkins持續整合前端專案並自動化部署到Nginx伺服器Jenkins前端Nginx伺服器
- 持續整合工具之Jenkins安裝部署Jenkins
- 以 egg.js 為例的持續整合(CI)、持續部署(CD)JS
- 「Jenkins+Git+Maven+Shell+Tomcat持續整合」經典教程JenkinsGitMavenTomcat
- 私有化輕量級持續整合部署方案--05-持續部署服務-Drone(上)
- 私有化輕量級持續整合部署方案--05-持續部署服務-Drone(下)
- 基於Gitlab-CI/CD Docker 持續整合 node 專案GitlabDocker
- 開始使用Travis CI持續整合你的專案吧
- 持續整合、持續交付和持續部署有什麼區別?0基礎學習linux技能Linux
- SpringBoot+Docker+Git+Jenkins實現簡易的持續整合和持續部署Spring BootDockerGitJenkins
- IDEA搭建和部署Maven專案IdeaMaven
- Jenkins in Action :GitLab 部署 Maven 專案JenkinsGitlabMaven
- jenkins+gitlab+nexus持續整合與部署學習JenkinsGitlab
- Jenkins持續整合Jenkins
- 持續整合 2.0
- 持續整合(二)
- Jenkins持續部署-Windows環境持續部署探究1JenkinsWindows
- GitLab 持續整合在 Laravel 商用專案中的應用實踐GitlabLaravel