本文共 8372 字,大约阅读时间需要 27 分钟。
本章内容不适合 初学者看,也看不懂
流程简介:
开发人员将代码上传至 Gitlab仓库
jenkins 从 Gitlab 中利用webhook拉取源码,编译打成 jar 包,然后构建成 docker 镜像,将镜像上传到 Harbor仓库。
jenkins 发送 SSH 远程命令,让生产服务器到 Harbor 私有仓库拉取镜像到本地,然后创建容器。
最后,用户可以访问到容器。
服务器名称 | IP地址 | 软件环境 |
---|---|---|
代码服务器(GitLab) | 192.168.168.12 | git,python |
持续集成服务器(jenkins) | 192.168.168.13 | maven+JDK+Docker |
Docker仓库(Harbor) | 192.168.168.14 | Docker+Harbor |
生产部署服务器(SpringCloud) | 192.168.168.15 | Docker+springcloud |
java development kit java 开发工具包[root@localhost ~]# tar -zxvf jdk-8u201-linux-x64.tar.gz -C /usr/src[root@localhost ~]# mv /usr/src/jdk1.8.0_201/ /usr/local/java [root@localhost ~]# echo 'export JAVA_HOME=/usr/local/javaexport JRE_HOME=/usr/local/java/jreexport CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/libexport PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin' >> /etc/profile[root@localhost ~]# rm -rf /usr/bin/java[root@localhost ~]# source /etc/profile[root@localhost ~]# java -versionjava version "1.8.0_201"Java(TM) SE Runtime Environment (build 1.8.0_201-b09)Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
[root@localhost ~]# tar -zxvf apache-maven-3.6.0-bin.tar.gz -C /usr/src/[root@localhost ~]# mv /usr/src/apache-maven-3.6.0/ /usr/local/maven[root@localhost ~]# echo 'export PATH=$PATH:/usr/local/maven/bin' >> /etc/profile[root@localhost ~]# source /etc/profile[root@localhost ~]# mvn -vApache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-25T02:41:47+08:00)Maven home: /usr/local/mavenJava version: 1.8.0_201, vendor: Oracle Corporation, runtime: /usr/local/java/jreDefault locale: zh_CN, platform encoding: UTF-8OS name: "linux", version: "3.10.0-862.el7.x86_64", arch: "amd64", family: "unix"
[root@gitlab ~]# yum -y install git[root@gitlab ~]# yum -y install policycoreutils-python [root@gitlab ~]# rpm -ivh gitlab-ce-12.3.0-ce.0.el7.x86_64.rpm [root@gitlab ~]# vim /etc/gitlab/gitlab.rb--- external_url 'http://192.168.168.10'[root@gitlab ~]# gitlab-ctl reconfigure [root@gitlab ~]# gitlab-ctl start
创建一个用户组:itheima_group
创建微服务项目(私有):tensquare_back
创建前端 web 项目(私有):tensquare_front
搭建 Harbor 需要 docker-compose:
docker
yum -y install yum-utils device-mapper-persistent-data lvm2yum-config-manager --add-repo=http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum makecache fastyum -y install docker-cemkdir -p /etc/dockertee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://m41udh8b.mirror.aliyuncs.com"]}EOF
Harbor
[root@habor ~]# tar zxvf harbor-offline-installer-v1.6.2.tgz -C /usr/local/[root@habor ~]# mv docker-compose /usr/local/bin/[root@habor ~]# chmod +x /usr/local/bin/docker-compose [root@habor ~]# cd /usr/local/harbor/[root@harbor harbor]# vim harbor.cfg ---hostname = 192.168.168.14 #修改成自己的本机IP地址[root@harborharbor]# ./install.sh
启动 harbor:docker-compose start
访问 harbor -web :192.168.168.14创建私有项目"tensquare",创建并设置管理员用户
用户名:shm
密码:QQ1136265636.com
JDK 1.8 ln -s /usr/local/java/bin/java /usr/bin
maven
[root@jenkins ~]# vim /usr/local/maven/conf/settings.xml---在 159 行 上添加以下内容:aliyun maven aliyun http://maven.aliyun.com/nexus/content/groups/public/ central
SonarQube7.8 + MySQL5.7.29:
docker
[root@jenkins ~]# vim /etc/yum.repos.d/ali-docker.repo[ali.docker]name=mirrors.aliyun.com.dockerbaseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/enabled=1gpgcheck=1gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg[root@jenkins ~]# yum -y install docker-ce[root@jenkins ~]# mkdir -p /etc/docker[root@jenkins ~]# tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://m41udh8b.mirror.aliyuncs.com"]}EOF[root@jenkins ~]# vim /usr/lib/systemd/system/docker.service --- ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry 192.168.168.14[root@jenkins ~]# systemctl start docker && systemctl enable docker
连接 Harbor
docker pull hello-worlddocker tag hello-world:latest 192.168.168.14/tensquare/hello-world:v1docker login -u shm -p QQ1136265636.com 192.168.168.14docker push 192.168.168.14/tensquare/hello-world
JDK + MAVEN
[root@tomcat ~]# java -versionjava version "1.8.0_201"Java(TM) SE Runtime Environment (build 1.8.0_201-b09)Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)[root@tomcat ~]# mvn -vApache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-25T02:41:47+08:00)Maven home: /usr/local/mavenJava version: 1.8.0_201, vendor: Oracle Corporation, runtime: /usr/local/java/jreDefault locale: zh_CN, platform encoding: UTF-8OS name: "linux", version: "3.10.0-1062.el7.x86_64", arch: "amd64", family: "unix"
docker
[root@docker ~]# vim /etc/yum.repos.d/ali-docker.repo[ali.docker]name=mirrors.aliyun.com.dockerbaseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/enabled=1gpgcheck=1gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg[root@docker ~]# yum -y install docker-ce[root@docker ~]# mkdir -p /etc/docker[root@docker ~]# tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://m41udh8b.mirror.aliyuncs.com"]}EOF[root@docker ~]# vim /usr/lib/systemd/system/docker.service --- ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry 192.168.168.14[root@docker ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf [root@docker ~]# sysctl -p[root@docker ~]# systemctl start docker && systemctl enable docker
连接 Harbor
docker login 192.168.168.14用户:shm密码:QQ1136265636.comdocker pull 192.168.168.14/tensquare/hello-world:v1
测试 能否生成 docker 镜像,上传到 harbor 仓库,再下载到 docker 生产服务器。
安装一个测试用的 spring cloude
[root@jenkins ~]# yum -y install git[root@jenkins ~]# yum makecache fast[root@jenkins ~]# git clone https://github.com/luojunyong/spring-cloud-examples.git
[root@jenkins src]# mv spring-cloud-examples/spring-cloud-eureka/ /usr/local/eureka[root@jenkins src]# cd /usr/local/eureka/spring-cloud-eureka1、#修改 eureka 注册中心配置文件[root@jenkins eureka]# vim src/main/resources/application.properties --- 修改成以下内容:spring.application.name=spring-cloud-eureka #名字server.port=8000 #端口eureka.client.register-with-eureka=true #当前应用是否要进行注册至注册中心eureka.client.fetch-registry=true #当前应用是否从注册中心获取信息eureka.client.serviceUrl.defaultZone=http://192.168.168.13:8000/eureka/#本机IP地址和端口号2、#编译打包,生成 jar 包。[root@node1 spring-cloud-eureka]# mvn clean package[root@jenkins spring-cloud-eureka]# ls target/---spring-cloud-eureka-0.0.1-SNAPSHOT.jar
[root@jenkins target]# mkdir /dockerfile
[root@jenkins target]# cp spring-cloud-eureka-0.0.1-SNAPSHOT.jar /dockerfile/制作 jar 包的 dockerfile文件
FROM openjdk:8-jdk-alpineARG JAR_FILECOPY ${ JAR_FILE} eureka.jarEXPOSE 8000ENTRYPOINT ["java","-jar","/eureka.jar"]
构建镜像的同时,为 JAR_FILE 赋值:
[root@jenkins dockerfile]# docker build --build-arg JAR_FILE=spring-cloud-eureka-0.0.1-SNAPSHOT.jar -t eureka:v1 .docker build: 构建--build-arg:赋值JAR_FILE:引用变量=变量值(eureka的 jar包)-t :指定构建镜像的版本(tag标签) eureka:v1 . :在当前目录下构建
查看本地仓库:docker images
运行此镜像:docker run -itd -p 8000:8000 eureka:v1
查看容器日志,通过 容器ID :docker logs -f ID号
docker tag eureka:v1 192.168.168.14/tensquare/eureka:v1
docker login -u 用户名 -p 密码 192.168.168.14:85 先登录 Harbor
docker push 192.168.168.14/tensquare/eureka:v1
docker login -u 用户名 -p 密码 192.168.168.14:85 先登录 Harbor
docker pull 192.168.168.14/tensquare/eureka:v1
这一步可以不做,没什么意义
gitlab
pipeline - SCM - Jenkinsfile
pipeline { agent any stages { //项目构建 stage('pull code') { //拉取代码 steps { //具体实施步骤 checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '218fb747-c605-4fa0-80d3-c322cd42d7a9', url: 'git@192.168.168.12:itheima_group/test.git']]]) } } }}
Pipeline 流水线:
GitLab
- 项目上传到 Gitlab
jenkins集成步骤
- 从 Gitlab拉取项目源代码
- 提交到 SonarQube 代码审查
- 生成 jar包
- 使用 Dockerfile 将 jar 包制作成镜像
- 上传到 Harbor 仓库
部署上线步骤
- 生产服务器拉取镜像和发布应用
- 部署前端服务
转载地址:http://gyrji.baihongyu.com/