centos7.9環境基于docker和pipeline構建jenkins的ci平臺

1、部署gitlab
1.1 部署gitlab
docker run -d \
--name gitlab \
-p 8443:443 \
-p 9999:80 \
-p 9998:22 \
-v /data/gitlab/config:/etc/gitlab \
-v /data/gitlab/logs:/var/log/gitlab \
-v /data/gitlab/data:/var/opt/gitlab \
-v /etc/localtime:/etc/localtime \
--restart=always \
lizhenliang/gitlab-ce-zh:latest
訪問地址:http://IP:9999
初次會先設置管理員密碼 ,然后登陸,默認管理員用戶名root,密碼就是剛設置的。
root:admin888
1.2 創建項目,提交測試代碼
進入后先創建項目,提交代碼,以便后面測試


yum install -y git
mkdir git_demoair
cd git_demoair
# 將代碼解壓,并且推送到git倉庫中
unzip tomcat-java-demo-master.zip
cd tomcat-java-demo-master
git init
git config --global user.email "admin@163.com"
git config --global user.name "admin"
git remote add origin http://10.11.0.232:9999/root/java-demo.git
git add .
git commit -m "init commit"
git push -u origin master
# git刪除目錄命令(保留目錄:git rm -r --cached src db Dockerfile LICENSE pom.xml README.md)
git rm -r xx目錄
git commit -m "delete xx目錄"
git push origin master
2、部署Harbor鏡像倉庫
2.1 安裝docker與docker-compose
# wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
# yum install docker-ce -y
# yum install docker-compose
# systemctl start docker
# systemctl enable docker
2.2 解壓離線包部署
# tar zxvf harbor-offline-installer-v1.9.1.tgz
# cd harbor
# vi harbor.yml
hostname: 10.11.0.150
port: 8888
# ./prepare
# ./install.sh
2.3 在Jenkins主機配置Docker可信任
由于habor未配置https,還需要在docker配置可信任。
# cat /etc/docker/daemon.json
{"registry-mirrors": ["http://qj4ewogx.mirror.aliyuncs.com"],
"insecure-registries": ["10.11.0.150"]
}
# systemctl restart docker
3、部署Jenkins
3.1 準備JDK和Maven環境
# tar xf jdk-8u261-linux-x64.tar.gz
# mv jdk1.8.0_261 /usr/local/jdk
# tar zxf apache-maven-3.6.1-bin.tar.gz
# mv apache-maven-3.6.1 /usr/local/maven
docker run -d --name jenkins -p 80:8080 -p 50000:50000 -u root \
-v /data/jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-v /usr/local/maven:/usr/local/maven \
-v /usr/local/jdk:/usr/local/jdk \
-v /etc/localtime:/etc/localtime \
--name jenkins jenkins/jenkins:lts
密碼: admin/admin888
maven 的設置
maven設置網絡代理 和 源地址
基于 centos:7 鏡像制作自定義mycentos:v2
# 交互式運行centos:7
# docker run -it --name=mycentos
# 在運行的mycentos容器中修改網絡
# vi /etc/profile
export http_proxy=http://10.11.0.150:808
export https_proxy="https://10.11.0.150:808"
export ftp_proxy=http://10.11.0.150:808
export socks_proxy="socks://10.11.0.150:808/"
export http_proxy=http://10.11.0.150:808
export https_proxy=https://10.11.0.150:808
# echo "proxy=http://10.11.0.150:808" >> /etc/yum.conf
# source /etc/profile
# 替換yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# 安裝常用工具
yum install -y iproute net-tools telnet wget curl tree iftop htop iotop lrzsz
# 提交鏡像為 mycentos:v1
# docker commit mycentos mycentos:v1
編譯安裝tomcat
下載地址:https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.43/bin/apache-tomcat-8.5.43.tar.gz
編寫Dockerfile
FROM mycentos:v2
LABEL maintainer www.chinasoft.com
ENV VERSION=8.5.43
RUN source /etc/profile && \
yum install java-1.8.0-openjdk wget curl unzip iproute net-tools -y && \
yum clean all && \
rm -rf /var/cache/yum/*
COPY apache-tomcat-${VERSION}.tar.gz /
RUN source /etc/profile && \
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"]
java包
FROM java:8-jdk-alpine
LABEL maintainer www.chinasoft.com
ENV JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF8 -Duser.timezone=GMT+08"
RUN apk add -U tzdata && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY ./target/eureka-service.jar ./
EXPOSE 8888
CMD java-jar $JAVA_OPTS /eureka-service.jar
3.3 安裝插件
如果安裝慢,可以更新一下插件源地址
cd /data/jenkins_home/updates
sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json
sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
系統管理-->插件管理-->Installed
搜索git/pipeline,點擊安裝。
4、發布測試
4.1 添加參數化構建
This project is parameterized -> String Parameter
Name:Branch # 變量名,下面腳本中調用
Default Value:master # 默認分支
Description:發布的代碼分支 # 描述
4.2 Pipeline腳本
def registry = "10.11.0.232"
def project = "welcome"
def app_name = "demo"
def image_name = "${registry}/${project}/${app_name}:${Branch}-${BUILD_NUMBER}"
def git_address = "http://10.11.0.232:9999/root/java-demo.git"
def docker_registry_auth = "fb0e0bfe-7875-40a0-bc08-8898c6644cca"
# jenkins憑證id
def git_auth = "e7c91602-823f-484c-ad6f-d1497bf2d36c"
pipeline {
agent any
stages {
stage('拉取代碼'){
steps {
checkout([$class: 'GitSCM', branches: [[name: '${Branch}']], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]])
}
}
stage('代碼編譯'){
steps {
sh """
JAVA_HOME=/usr/local/jdk
PATH=$JAVA_HOME/bin:/usr/local/maven/bin:$PATH
mvn clean package -Dmaven.test.skip=true
"""
}
}
stage('構建鏡像'){
steps {
withCredentials([usernamePassword(credentialsId: "${docker_registry_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {
sh """
echo '
FROM ${registry}/library/tomcat:v1
LABEL maitainer chinasoft
RUN rm -rf /usr/local/tomcat/webapps/*
ADD target/*.war /usr/local/tomcat/webapps/ROOT.war
' > Dockerfile
docker build -t ${image_name} .
docker login -u ${username} -p '${password}' ${registry}
docker push ${image_name}
"""
}
}
}
stage('部署到Docker'){
steps {
sh """
REPOSITORY=${image_name}
docker rm -f tomcat-java-demo |true
docker container run -d --name tomcat-java-demo -p 88:8080 ${image_name}
"""
}
}
}
}
4.3 添加憑據
1、添加拉取git代碼憑據,并獲取id替換到上面git_auth變量值。


2、添加拉取harbor鏡像憑據,并獲取id替換到上面docker_registry_auth變量值。
harbor的jenkins憑據

4.4 通過jenkins進行代碼的發布


1、可以看到通過jenkins和pipeline能順利編譯并運行起項目
2、模擬代碼修改并提交gitlab,并且重新執行jenkins編譯,可以看到成功修改
[root@node01 git_demoair]# vim src/main/resources/templates/index.ftl
[root@node01 git_demoair]# git add .
[root@node01 git_demoair]# git commit -m "modify index.ftl"


浙公網安備 33010602011771號