基於Docker構建企業Jenkins CI平台
一.什么是CI
持續集成(Continuous integration)是一種軟件開發實踐,每次集成都通過自動化的構建(包括編譯,發布,自動化測試)來驗證,從而盡早地發現集成錯誤。
二.CI工具
持續集成工具:jenkins
構建工具:maven
版本控制庫:git
鏡像倉庫:harbor
三.CI流程
工作流程:
1. 開發人員提交代碼到Git版本倉庫;
2. Jenkins人工/定時觸發項目構建;
3. Jenkins拉取代碼、代碼編碼、打包鏡像、推送到鏡像倉庫;
4. Jenkins在Docker主機創建容器並發布。
環境規划如下:
操作系統:centos7.6
四.部署Git代碼版本倉庫
1. 安裝git倉庫
# yum install git -y
2. 創建Git用戶並設置密碼
# useradd git
# passwd git
3. 創建倉庫
# su - git
# mkdir tomcat-java-demo.git
# cd tomcat-java-demo.git
# git --bare init
4. 訪問創建的這個倉庫
# git clone git@192.168.1.165:/home/git/tomcat-java-demo.git
五.上傳java項目代碼(192.168.1.166)
# cd /home/
# git clone https://github.com/lizhenliang/tomcat-java-demo
# cd /home/tomcat-java-demo
修改私有鏡像倉庫地址:
# vim .git/config
url = git@192.168.1.165:/home/git/tomcat-java-demo.git
本地代碼提交到git鏡像倉庫
# git add .
# git commit -m 'all'
# git push origin master
備注:初次提交可能報錯
解決方案:
# git config --global user.email "you@example.com"
# git config --global user.name "Your Name"
六.部署Harbor鏡像倉庫(192.168.1.165)
參考:https://www.cnblogs.com/521football/p/10571304.html
七.配置JDK和Maven環境(192.168.1.166)
# tar -zxvf jdk-8u45-linux-x64.tar.gz
# tar -zxvf apache-maven-3.5.0-bin.tar.gz
# mv apache-maven-3.5.0 /usr/local/maven
# mv jdk1.8.0_45/ /usr/local/jdk
配置java環境變量
vim /etc/profile
export JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
# java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
八.安裝jenkins(192.168.1.166)
1. 安裝jenkins
# tar -zxvf apache-tomcat-8.0.46.tar.gz
# mv apache-tomcat-8.0.46 /usr/local/jenkins_tomcat
# mv /home/jenkins.war /usr/local/jenkins_tomcat/webapps/ROOT.war
# cd /usr/local/jenkins_tomcat
# sh bin/startup.sh
# tail -f logs/catalina.out
日志中查看登錄密碼:cb2f3ddce17b494b847abf619a6c3ca5
登錄jenkins: http://192.168.1.166:8080
可以跳過插件的安裝…….
2. 創建用戶
3. 安裝插件
更新jenkins官方源http替換https
Jenkins---->插件管理--->Advanced --->Update Site
修改后submit---> Check now
安裝插件
系統管理--->插件管理--->Available---> 選擇pipeline, SCM to job插件進行安裝
4. 配置git密鑰(192.168.1.166)
# ssh-keygen
# ssh-copy-id git@192.168.1.165
添加全局憑證
Jenkins--->憑據--->系統--->全局憑據
上圖key粘貼進去即可:
# cat ~/.ssh/id_rsa
九.安裝docker(192.168.1.166)
參考:https://www.cnblogs.com/521football/p/10484390.html
十.構建基礎鏡像(192.168.1.166)
1. 構建tomcat基礎鏡像並上傳harbor
創建Dockerfile-tomcat
# vim Dockerfile-tomcat
FROM centos:7
MAINTAINER xbl
ENV VERSION=8.5.39
RUN yum install java-1.8.0-openjdk wget curl unzip iproute net-tools -y && \
yum clean all && \
rm -rf /var/cache/yum/*
RUN wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz && \
tar zxf apache-tomcat-${VERSION}.tar.gz && \
mv apache-tomcat-${VERSION} /usr/local/tomcat && \
rm -rf apache-tomcat-${VERSION}.tar.gz /usr/local/tomcat/webapps/* && \
mkdir /usr/local/tomcat/webapps/test && \
echo "ok" > /usr/local/tomcat/webapps/test/status.html && \
sed -i '1a JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"' /usr/local/tomcat/bin/catalina.sh && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ENV PATH $PATH:/usr/local/tomcat/bin
WORKDIR /usr/local/tomcat
EXPOSE 8080
CMD ["catalina.sh", "run"]
# docker build -t tomcat:v1 -f Dockerfile-tomcat .
啟動鏡像
docker run -d tomcat:v1
2. tomcat基礎鏡像推送到harbor
添加harbor可信任
# vim /etc/docker/daemon.json
{
"registry-mirrors": ["http://f1361db2.m.daocloud.io"],
"insecure-registries":["192.168.1.165"]
}
# systemctl restart docker.service
harbor用戶以及密碼登錄
# docker login 192.168.1.165 -u xubaolong -pxxx
# docker tag tomcat:v1 192.168.1.165/library/tomcat:v1
# docker push 192.168.1.165/library/tomcat:v1
十一.流水線發布測試(192.168.1.166)
創建流水線:
備注:此參數可以拓展:master(生產),dev(開發),test(測試)
Pipeline工作流程:
1. 從git倉庫中拉取代碼
2. maven構建項目及打包
3. 項目打包並推送鏡像到倉庫
- 下載tomcat基礎鏡像
- 增加構建后的war包到容器內
- Docke構建並推送業務鏡像到harbor倉庫
4. 部署到docker主機
- 刪除老業務鏡像
- 拉取業務鏡像
- 啟動Docker鏡像
Pipeline腳本如下:
node { // 指定Slave標簽
// 拉取代碼
stage('Git Checkout') {
checkout([$class: 'GitSCM', branches: [[name: '${branch}']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'da6ba478-0899-4dcb-9a8f-0ec24dcd9022', url: 'git@192.168.1.165:/home/git/tomcat-java-demo.git']]])
}
// 代碼編譯
stage('Maven Build') {
sh '''
export JAVA_HOME=/usr/local/jdk
/usr/local/maven/bin/mvn clean package -Dmaven.test.skip=true
'''
}
// 項目打包到鏡像並推送到鏡像倉庫
stage('Build and Push Image') {
sh '''
REPOSITORY=192.168.1.165/project/tomcat-java-demo:${branch}
cat > Dockerfile << EOF
FROM 192.168.1.165/library/tomcat:v1
MAINTAINER xbl
RUN rm -rf /usr/local/tomcat/webapps/*
ADD target/*.war /usr/local/tomcat/webapps/ROOT.war
EOF
docker build -t $REPOSITORY .
docker login 192.168.1.165 -u xubaolong -p xxx
docker push $REPOSITORY
'''
}
// 部署到Docker主機
stage('Deploy to Docker') {
sh '''
REPOSITORY=192.168.1.165/project/tomcat-java-demo:${branch}
docker rm -f tomcat-java-demo |true
# docker image rm $REPOSITORY |true
docker pull $REPOSITORY
docker container run -d --name tomcat-java-demo -p 88:8080 $REPOSITORY
'''
}
}
通過瀏覽器來訪問tomcat-java-demo項目:http://192.168.1.166:88/
備注:由於tomcat,jdk,maven二進制包安裝,有需要的小伙伴可自行下載
鏈接:https://pan.baidu.com/s/1XKWEVy-nPErNBQDCSRd-5w 密碼:h8q4