ci,cd脚本
before_script:
- export IMAGE_FULL_NAME=${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG}-${CI_COMMIT_SHA}
stages:
- compile
- build
- test
- show
- cloud
- req_prod
variables:
MAVEN_REPO: "/data/repo"
PROJECT: "snow-anti"
PROJECT_PORT: "8041"
K8S_FILE: snow-k8s.yml
job-compile:
image: registry.onesport.com.cn/docker/maven:3.6.3
stage: compile
allow_failure: false
tags:
- share
only:
- /^release.*$/
script:
- mvn -Dmaven.repo.local=$MAVEN_REPO clean package -Dmaven.test.skip=true
artifacts:
expire_in: 2week
paths:
- target/*.jar
job-build:
image: registry.onesport.com.cn/docker/ci-tool:1.0
stage: build
allow_failure: false
dependencies:
- job-compile
tags:
- share
only:
- /^release.*$/
script:
- docker login --username $CI_REGISTRY_USER --password $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build -t $IMAGE_FULL_NAME .
- docker push $IMAGE_FULL_NAME
- docker rmi $IMAGE_FULL_NAME
启动K8s测试环境:
image: roffe/kubectl
stage: test
allow_failure: false
only:
- /^release.*$/
tags:
- snow-k8s
variables:
PROJECT_PORT: "8041"
APP_REPLICAS: 1
APP_NS: "new-system"
APP_CPU: "800m"
APP_MEMORY: "800Mi"
script:
- mkdir -p /root/.kube
- echo ${kube_config} | base64 -d > /root/.kube/config
- export KUBECONFIG=/root/.kube/config
- kubectl version
- sed -i "s#{APP_NAME}#$PROJECT#g;
s#{APP_PORT}#$PROJECT_PORT#g;
s#{APP_COUNT}#$APP_REPLICAS#g;
s#{NAMESPACE}#$APP_NS#g;
s#{IMAGE_URL}#$IMAGE_FULL_NAME#g" $K8S_FILE
- cat $K8S_FILE
- kubectl apply -f $K8S_FILE
启动K8s演示环境:
image: roffe/kubectl
stage: show
allow_failure: false
when: manual
only:
- /^release.*$/
tags:
- snow-k8s
variables:
PROJECT_PORT: "8041"
APP_REPLICAS: 1
APP_NS: "show-new-system"
APP_CPU: "800m"
APP_MEMORY: "800Mi"
script:
- mkdir -p /root/.kube
- echo ${kube_config} | base64 -d > /root/.kube/config
- export KUBECONFIG=/root/.kube/config
- kubectl version
- sed -i "s#{APP_NAME}#$PROJECT#g;
s#{APP_PORT}#$PROJECT_PORT#g;
s#{APP_COUNT}#$APP_REPLICAS#g;
s#{NAMESPACE}#$APP_NS#g;
s#{IMAGE_URL}#$IMAGE_FULL_NAME#g" $K8S_FILE
- cat $K8S_FILE
- kubectl apply -f $K8S_FILE
启动K8s生产环境:
image: roffe/kubectl
stage: req_prod
allow_failure: false
when: manual
only:
- /^release.*$/
tags:
- snow-tyy
variables:
PROJECT_PORT: "8041"
APP_REPLICAS: 1
APP_NS: "one-system"
APP_CPU: "800m"
APP_MEMORY: "800Mi"
script:
- mkdir -p /root/.kube
- echo ${cloud_config} | base64 -d > /root/.kube/config
- export KUBECONFIG=/root/.kube/config
- kubectl version
- sed -i "s#{APP_NAME}#$PROJECT#g;
s#{APP_PORT}#$PROJECT_PORT#g;
s#{APP_COUNT}#$APP_REPLICAS#g;
s#{NAMESPACE}#$APP_NS#g;
s#{IMG_HOST}#$IMG_HOST#g;
s#{IMAGE_URL}#$IMAGE_FULL_NAME#g" $K8S_FILE
- cat $K8S_FILE
- kubectl apply -f $K8S_FILE
k8syml文件
apiVersion: v1
kind: Service
metadata:
name: {APP_NAME}
namespace: {NAMESPACE}
labels:
app: {APP_NAME}
spec:
type: NodePort
ports:
- port: {APP_PORT}
targetPort: {APP_PORT}
name: {APP_NAME}
selector:
app: {APP_NAME}
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: {APP_NAME}
namespace: {NAMESPACE}
spec:
replicas: {APP_COUNT}
selector:
matchLabels:
app: {APP_NAME}
template:
metadata:
labels:
app: {APP_NAME}
spec:
containers:
- name: {APP_NAME}
image: {IMAGE_URL}
readinessProbe:
httpGet:
path: /actuator/health
port: {APP_PORT}
initialDelaySeconds: 60
timeoutSeconds: 2
periodSeconds: 20
successThreshold: 1
failureThreshold: 5
ports:
- containerPort: {APP_PORT}
env:
- name: EUREKA_HOST
valueFrom:
configMapKeyRef:
name: registry-cm
key: registry_name
- name: REDIS_HOST
valueFrom:
configMapKeyRef:
name: redis-cm
key: redis_host
- name: REDIS_PORT
valueFrom:
configMapKeyRef:
name: redis-cm
key: redis_port
- name: REDIS_DB
valueFrom:
configMapKeyRef:
name: redis-cm
key: redis_db
- name: REDIS_PWD
valueFrom:
configMapKeyRef:
name: redis-cm
key: redis_pwd
- name: PGSQL_PWD
valueFrom:
configMapKeyRef:
name: db-cm
key: pgsql_password
- name: PGSQL_URL
valueFrom:
configMapKeyRef:
name: db-cm
key: pgsql_url
- name: PGSQL_USERNAME
valueFrom:
configMapKeyRef:
name: db-cm
key: pgsql_username
- name: PGSQL_PWD
valueFrom:
configMapKeyRef:
name: db-cm
key: pgsql_password
- name: PGSQL_DB
valueFrom:
configMapKeyRef:
name: db-cm
key: pgsql_anti_db
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: HOST_NAME
value: "$(POD_NAME).{APP_NAME}"
- name: SERVER_NAME
value: {APP_NAME}
- name: SERVER_PORT
value: "{APP_PORT}"
- name: TZ
value: "Asia/Shanghai"
# volumes:
# - name: host-time
# hostPath:
# path: /etc/localtime