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