微服務架構從入門到精通之DevOps實踐篇(十) Eureka Server構建和部署

基礎設施已經搭建完畢,我們先構建和部署註冊中心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,可以看到成功的部署列表

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章