parent
90c7e9674b
commit
18aeeb2dbb
@ -1,36 +1,127 @@ |
||||
def KUBERNETES_NAME = "kubernetes" |
||||
def DOCKER_REPOSITORY_CREDENTIAL_ID = "ea3d4aae-783b-460f-9cd0-931c53c021db" |
||||
def HARBOR_HOST = "http://192.168.75.149:30002" |
||||
def NAMESPACE_NAME = "library" |
||||
def REPOSITORY_NAME = "my-web-app" |
||||
def TAG = "v1.0" |
||||
pipeline { |
||||
agent any |
||||
environment { |
||||
DOCKER_IMAGE = "core.harbor.cn/library/my-web-app" |
||||
REGISTRY_CREDENTIALS_ID = '2' |
||||
REGISTRY_URL = 'http://core.harbor.cn' |
||||
agent { |
||||
kubernetes{ |
||||
cloud "${KUBERNETES_NAME}" #集群名字 |
||||
slaveConnectTimeout 1200 #连接超时时间 |
||||
yaml ''' |
||||
apiVersion: v1 |
||||
kind: pod #metadata 流水线默认创建,此处不许设置 |
||||
spec: |
||||
containers: |
||||
- name: jnlp |
||||
image: jenkins/inbound-agent:3107.v665000b_51092-15 |
||||
args: [\'$(JENKINS_SECRET)\', \'$(JENKINS_NAME)\'] |
||||
imagePullPolicy: IfNotPresent #镜像拉取策略:不存在则拉取 |
||||
volumeMounts: #挂载时区,用一个系统时间 |
||||
- mountPath: "/etc/localtime" |
||||
name: "volume-2" |
||||
readOnly: false |
||||
- name: docker #与流水线中容器名称必须一致container(name: 'docker', shell: 'echo') |
||||
image: docker:19.03.15-git #docker容器镜像必须19版本 |
||||
imagePullPolicy: IfNotPresent |
||||
tty: true |
||||
volumeMounts: |
||||
- mountPath: "/etc/localtime" |
||||
name: "volume-2" |
||||
readOnly: false |
||||
- mountPath: "/var/run/docker.sock" |
||||
name: "volume-docker" |
||||
readOnly: false |
||||
- mountPath: "/etc/hosts" |
||||
name: "volume-hosts" |
||||
readOnly: false |
||||
- name: kubectl #与流水线中容器名称必须一致 container(name: 'kubectl', shell: 'echo') |
||||
image: bitnami/kubectl:1.22.0 #kubectl版本要与k8s本版一致 |
||||
imagePullPolicy: IfNotPresent |
||||
tty: true |
||||
volumeMounts: |
||||
- mountPath: "/etc/localtime" |
||||
name: "volume-2" |
||||
readOnly: false |
||||
- mountPath: "/var/run/docker.sock" |
||||
name: "volume-docker" |
||||
readOnly: false |
||||
- mountPath: "/root/.kube" |
||||
name: "kubeconfig" |
||||
readOnly: false |
||||
volumes: |
||||
- name: volume-maven-repo |
||||
emptyDir: {} |
||||
- name: volume-2 |
||||
hostPath: |
||||
path: "/usr/share/zoneinfo/Asia/Shanghai" |
||||
- name: kubeconfig |
||||
secret: |
||||
secretName: kubeconfig |
||||
items: |
||||
- key: config |
||||
path: config |
||||
- name: volume-docker |
||||
hostPath: |
||||
path: "/var/run/docker.sock" |
||||
- name: volume-hosts |
||||
hostPath: |
||||
path: /etc/hosts |
||||
|
||||
|
||||
''' |
||||
} |
||||
} |
||||
stages { |
||||
|
||||
stages { |
||||
stage('构建镜像及检查kubernetes环境') { |
||||
parallel { |
||||
stage('构建镜像') { |
||||
steps { |
||||
script { |
||||
docker.withRegistry(REGISTRY_URL, REGISTRY_CREDENTIALS_ID) { |
||||
def customImage = docker.build(DOCKER_IMAGE) |
||||
} |
||||
} |
||||
steps { |
||||
withCredentials([usernamePassword(credentialsId: '${DOCKER_REPOSITORY_CREDENTIAL_ID}', passwordVariable: 'PASSWORD', usernameVariable: 'USERNAME')]) { |
||||
container(name: 'docker', shell: 'echo') { |
||||
sh """ |
||||
docker build -t ${HARBOR_HOST}/${NAMESPACE_NAME}/${REPOSITORY_NAME}:${TAG} . |
||||
docker login ${HARBOR_HOST} --username=${USERNAME} --password=${PASSWORD} |
||||
docker push ${HARBOR_HOST}/${NAMESPACE_NAME}/${REPOSITORY_NAME}:${TAG} |
||||
""" |
||||
} |
||||
} |
||||
} |
||||
} |
||||
stage('推送镜像') { |
||||
steps { |
||||
script { |
||||
docker.withRegistry(REGISTRY_URL, REGISTRY_CREDENTIALS_ID) { |
||||
docker.image(DOCKER_IMAGE).push() |
||||
} |
||||
} |
||||
|
||||
stage('Check Kubernetes ENV') { |
||||
steps { |
||||
container(name: 'kubectl', shell: 'echo') { |
||||
sh 'sleep 10' |
||||
} |
||||
|
||||
} |
||||
} |
||||
// 其他阶段 |
||||
|
||||
} |
||||
} |
||||
|
||||
post { |
||||
always { |
||||
echo "构建完成" |
||||
stage('Deploy Image to Kubernetes') { |
||||
steps { |
||||
container(name: 'kubectl', shell: 'echo') { |
||||
sh 'sleep 10' |
||||
} |
||||
} |
||||
} |
||||
|
||||
stage('Test Service') { |
||||
steps { |
||||
sh 'sleep 10' |
||||
} |
||||
} |
||||
|
||||
stage('Send Email to Admin') { |
||||
steps { |
||||
sh 'sleep 10' |
||||
} |
||||
} |
||||
|
||||
} |
||||
} |
||||
|
Loading…
Reference in new issue