基础设施已经搭建完毕,我们先构建和部署注册中心Eureka Server。
一、创建GitLab项目
1.1 创建devops组
1.2 创建eureka-server工程
1.3 配置 Group 环境变量
到 GitLab > Groups > eureka-server > Settings > CI/CD > Variable里设置 “.gitlab-ci.yml” 里要用到的环境变量:
- DOCKER_HUB_REPO:保存 Spring Cloud应用的 docker镜像库,本文使用 devops做为持续集成的库标签: bigdatafly/devops
二、提交代码和配置文件
整个工程的目录结构如下:
通过git命令把工程push到gitlab,其中,Bigdatafly/devops 为docker hub,用户可以采用自己搭建的私服Registry。
2.1 Eureka Server.java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
2.2 Application.yml
# eureka-server
server:
port: ${port:8761} # from env variable
eureka:
instance:
hostname: ${hostname:localhost} # from env variable
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
2.3 .gitlab-ci.yml
variables:
MAVEN_OPTS: "-Dmaven.repo.local=/Users/zhuxihua/repository"
DOCKER_DRIVER: overlay
PROJECT_NAME: $CI_PROJECT_NAME
PROJECT_VERSION: "0.0.2"
stages:
- build
- package
- deploy
maven-build:
image: bigdatafly/maven:mvn3.5.4-jdk8-alpine
stage: build
script:
- mvn package -B -DskipTests # 跳过测试节省时间
- mv target/$CI_PROJECT_NAME*.jar target/app.jar
artifacts:
paths:
- target/*.jar
docker-build:
stage: package
script:
- docker login -u xxxxx -p xxxxx
- docker build -t $DOCKER_HUB_REPO:$PROJECT_NAME-$PROJECT_VERSION .
- docker push $DOCKER_HUB_REPO:$PROJECT_NAME-$PROJECT_VERSION
k8s-deploy:
stage: deploy
image:
name: bigdatafly/devops:k8s-kubectl-1.11.0
entrypoint: [""] # 覆盖原镜像的entrypoint,要不然会直接退出
script:
- kubectl apply -f Deployment.yaml # 发布应用到k8s集群
- kubectl set env deploy/eureka-server DEPLOY_DATE="$(date)"
2.4 Dockerfile
FROM bigdatafly/jdk:8u191
ADD /target/app.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
2.5 Deployment.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: eureka-server
labels:
app: eureka-server
version: 0.0.2
spec:
selector:
matchLabels:
app: eureka-server
replicas: 1
template:
metadata:
labels:
app: eureka-server
spec:
containers:
- name: eureka-server
image: bigdatafly/devops:eureka-server-0.0.2
imagePullPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
name: eureka
labels:
app: eureka
version: 0.0.2
spec:
selector:
app: eureka-server
type: LoadBalancer
ports:
- name: tcp-8761-8761
protocol: TCP
port: 8761
targetPort: 8761
上传完毕,配置了autodevops,giltab-ci会自动进行CI/CD过程 。
三、GitLab-CI过程
提交项目文件后,.gitlab-ci.yml会触发 GitLab CI运行,可以到 GitLab > Admin Area >Pipelines 查看打包部署结果。
3.1 GitLab Pipelines
如果有运行失败,可以点击进去查看失败原因。
3.2 maven-build
为了maven构建速度更快,最好采用阿里的maven仓库
3.2 docker-package
3.3 k8s-deploy
3.4 过程成功结束
3.5 kubernetes Dashboard,可以看到成功的部署列表