KubeSphere (https://Kubesphere.io) 是在 Kubernetes 之上构建的以应用为中心的多租户容器平台,完全开源,支持多云与多集群管理,提供全栈的 IT 自动化运维的能力,简化企业的 DevOps 工作流。KubeSphere 提供了运维友好的向导式操作界面,帮助企业快速构建一个强大和功能丰富的容器云平台。

DevOps 系统为用户提供了一个自动化的环境,应用可以自动发布到同一个平台。它还兼容第三方私有镜像仓库(如 Harbor)和代码库(如 GitLab/GitHub/SVN/BitBucket)。它为用户提供了全面的、可视化的 CI/CD 流水线,打造了极佳的用户体验,而且这种兼容性强的流水线能力在离线环境中非常有用。



自定义流水线。
流水线的五个阶段:
拉取源码 -> 构建源码 -> 构建镜像->推送镜像 -> 部署项目

在图形编辑面板上,从类型下拉列表中选择 node,从 Label 下拉列表中选择 maven。

请点击左侧的加号图标来添加阶段。点击添加步骤上方的文本框,然后在右侧的名称字段中为该阶段设置名称。

点击添加步骤。在列表中选择 git,以从 GitLab 拉取项目代码。在弹出的对话框中,填写必需的字段。点击确定完成操作。



mvn clean package -Dmaven.test.skip=true -Pdev

docker build -t wms-gateway:v1 -f wms-gateway/Dockerfile ./wms-gateway/



出于安全原因,帐户信息在脚本中显示为变量。


echo "$HARBOR_PWD_VAR" | docker login $REGISTRY -u "$HARBOR_USER_VAR" --password-stdin
# 镜像打tag
docker tag wms-gateway:v1 $REGISTRY/$DOCKERHUB_NAMESPACE/wms-gateway:SNAPSHOT-$BUILD_NUMBER
# 推送镜像
docker push $REGISTRY/$DOCKERHUB_NAMESPACE/wms-gateway:SNAPSHOT-$BUILD_NUMBER


shell脚本envsubst < devops/deploy/gateway.yaml | kubectl apply -f -







如果所有配置都成功运行,可以看到所有阶段都已完成。

在右上角点击查看日志,查看所有日志。点击每个阶段查看其详细日志。您可以根据日志排除故障和问题,也可以将日志下载到本地进行进一步分析。

pipeline {
agent {
node {
label 'maven'
}
}
stages {
stage('clone code') {
agent none
steps {
container('maven') {
git(url: 'http://192.168.0.126/saas-wms/linkinsense-wms-public.git', credentialsId: 'gitlab', changelog: true, poll: false, branch: "$env_name")
}
sh 'ls -al'
}
}
stage('编译 构建代码') {
agent none
steps {
container('maven') {
sh 'ls'
sh 'mvn clean package -Dmaven.test.skip=true -Pdev'
}
}
}
stage('default-2') {
parallel {
stage('构建gateway镜像') {
agent none
steps {
container('maven') {
sh 'ls'
sh 'docker build -t wms-gateway:v1 -f wms-gateway/Dockerfile ./wms-gateway/'
}
}
}
stage('构建auth镜像') {
agent none
steps {
container('maven') {
sh 'ls'
sh 'docker build -t wms-auth:v1 -f wms-auth/Dockerfile ./wms-auth/'
}
}
}
stage('构建admin镜像') {
agent none
steps {
container('maven') {
sh 'ls'
sh 'docker build -t wms-admin:v1 -f wms-admin/Dockerfile ./wms-admin/'
}
}
}
stage('构建warehouse镜像') {
agent none
steps {
container('maven') {
sh 'ls'
sh 'docker build -t wms-warehouse:v1 -f wms-warehouse/Dockerfile ./wms-warehouse/'
}
}
}
stage('构建orders镜像') {
agent none
steps {
container('maven') {
sh 'ls'
sh 'docker build -t wms-orders:v1 -f wms-orders/Dockerfile ./wms-orders/'
}
}
}
stage('构建outbound镜像') {
agent none
steps {
container('maven') {
sh 'ls'
sh 'docker build -t wms-outbound:v1 -f wms-outbound/Dockerfile ./wms-outbound/'
}
}
}
stage('构建log镜像') {
agent none
steps {
container('maven') {
sh 'ls'
sh 'docker build -t wms-log:v1 -f wms-log/Dockerfile ./wms-log/'
}
}
}
}
}
stage('default-3') {
parallel {
stage('推送gateway镜像') {
agent none
steps {
container('maven') {
withCredentials([usernamePassword(credentialsId : 'harbor' ,passwordVariable : 'HARBOR_PWD_VAR' ,usernameVariable : 'HARBOR_USER_VAR' ,)]) {
sh 'echo "$HARBOR_PWD_VAR" | docker login $REGISTRY -u "$HARBOR_USER_VAR" --password-stdin'
sh 'docker tag wms-gateway:v1 $REGISTRY/$DOCKERHUB_NAMESPACE/wms-gateway:SNAPSHOT-$BUILD_NUMBER '
sh 'docker push $REGISTRY/$DOCKERHUB_NAMESPACE/wms-gateway:SNAPSHOT-$BUILD_NUMBER '
}
}
}
}
stage('推送auth镜像') {
agent none
steps {
container('maven') {
withCredentials([usernamePassword(credentialsId : 'harbor' ,passwordVariable : 'HARBOR_PWD_VAR' ,usernameVariable : 'HARBOR_USER_VAR' ,)]) {
sh 'echo "$HARBOR_PWD_VAR" | docker login $REGISTRY -u "$HARBOR_USER_VAR" --password-stdin'
sh 'docker tag wms-auth:v1 $REGISTRY/$DOCKERHUB_NAMESPACE/wms-auth:SNAPSHOT-$BUILD_NUMBER '
sh 'docker push $REGISTRY/$DOCKERHUB_NAMESPACE/wms-auth:SNAPSHOT-$BUILD_NUMBER '
}
}
}
}
stage('推送admin镜像') {
agent none
steps {
container('maven') {
withCredentials([usernamePassword(credentialsId : 'harbor' ,passwordVariable : 'HARBOR_PWD_VAR' ,usernameVariable : 'HARBOR_USER_VAR' ,)]) {
sh 'echo "$HARBOR_PWD_VAR" | docker login $REGISTRY -u "$HARBOR_USER_VAR" --password-stdin'
sh 'docker tag wms-admin:v1 $REGISTRY/$DOCKERHUB_NAMESPACE/wms-admin:SNAPSHOT-$BUILD_NUMBER '
sh 'docker push $REGISTRY/$DOCKERHUB_NAMESPACE/wms-admin:SNAPSHOT-$BUILD_NUMBER '
}
}
}
}
stage('推送warehouse镜像') {
agent none
steps {
container('maven') {
withCredentials([usernamePassword(credentialsId : 'harbor' ,passwordVariable : 'HARBOR_PWD_VAR' ,usernameVariable : 'HARBOR_USER_VAR' ,)]) {
sh 'echo "$HARBOR_PWD_VAR" | docker login $REGISTRY -u "$HARBOR_USER_VAR" --password-stdin'
sh 'docker tag wms-warehouse:v1 $REGISTRY/$DOCKERHUB_NAMESPACE/wms-warehouse:SNAPSHOT-$BUILD_NUMBER '
sh 'docker push $REGISTRY/$DOCKERHUB_NAMESPACE/wms-warehouse:SNAPSHOT-$BUILD_NUMBER '
}
}
}
}
stage('推送orders镜像') {
agent none
steps {
container('maven') {
withCredentials([usernamePassword(credentialsId : 'harbor' ,passwordVariable : 'HARBOR_PWD_VAR' ,usernameVariable : 'HARBOR_USER_VAR' ,)]) {
sh 'echo "$HARBOR_PWD_VAR" | docker login $REGISTRY -u "$HARBOR_USER_VAR" --password-stdin'
sh 'docker tag wms-orders:v1 $REGISTRY/$DOCKERHUB_NAMESPACE/wms-orders:SNAPSHOT-$BUILD_NUMBER '
sh 'docker push $REGISTRY/$DOCKERHUB_NAMESPACE/wms-orders:SNAPSHOT-$BUILD_NUMBER '
}
}
}
}
stage('推送outbound镜像') {
agent none
steps {
container('maven') {
withCredentials([usernamePassword(credentialsId : 'harbor' ,passwordVariable : 'HARBOR_PWD_VAR' ,usernameVariable : 'HARBOR_USER_VAR' ,)]) {
sh 'echo "$HARBOR_PWD_VAR" | docker login $REGISTRY -u "$HARBOR_USER_VAR" --password-stdin'
sh 'docker tag wms-outbound:v1 $REGISTRY/$DOCKERHUB_NAMESPACE/wms-outbound:SNAPSHOT-$BUILD_NUMBER '
sh 'docker push $REGISTRY/$DOCKERHUB_NAMESPACE/wms-outbound:SNAPSHOT-$BUILD_NUMBER '
}
}
}
}
stage('推送log镜像') {
agent none
steps {
container('maven') {
withCredentials([usernamePassword(credentialsId : 'harbor' ,passwordVariable : 'HARBOR_PWD_VAR' ,usernameVariable : 'HARBOR_USER_VAR' ,)]) {
sh 'echo "$HARBOR_PWD_VAR" | docker login $REGISTRY -u "$HARBOR_USER_VAR" --password-stdin'
sh 'docker tag wms-log:v1 $REGISTRY/$DOCKERHUB_NAMESPACE/wms-log:SNAPSHOT-$BUILD_NUMBER '
sh 'docker push $REGISTRY/$DOCKERHUB_NAMESPACE/wms-log:SNAPSHOT-$BUILD_NUMBER '
}
}
}
}
}
}
stage('default-4') {
parallel {
stage('部署gateway到dev环境') {
agent none
steps {
container('maven') {
withCredentials([
kubeconfigFile(credentialsId : env.KUBECONFIG_CREDENTIAL_ID ,variable : 'KUBECONFIG' ,)]) {
sh 'envsubst < devops/deploy/gateway.yaml | kubectl apply -f -'
}
}
}
}
stage('部署auth到dev环境') {
agent none
steps {
container('maven') {
withCredentials([
kubeconfigFile(credentialsId: env.KUBECONFIG_CREDENTIAL_ID, variable: 'KUBECONFIG')]) {
sh 'envsubst < devops/deploy/auth.yaml | kubectl apply -f -'
}
}
}
}
stage('部署admin到dev环境') {
agent none
steps {
container('maven') {
withCredentials([
kubeconfigFile(credentialsId: env.KUBECONFIG_CREDENTIAL_ID, variable: 'KUBECONFIG')]) {
sh 'envsubst < devops/deploy/admin.yaml | kubectl apply -f -'
}
}
}
}
stage('部署warehouse到dev环境') {
agent none
steps {
container('maven') {
withCredentials([
kubeconfigFile(credentialsId: env.KUBECONFIG_CREDENTIAL_ID, variable: 'KUBECONFIG')]) {
sh 'envsubst < devops/deploy/warehouse.yaml | kubectl apply -f -'
}
}
}
}
stage('部署orders到dev环境') {
agent none
steps {
container('maven') {
withCredentials([
kubeconfigFile(credentialsId: env.KUBECONFIG_CREDENTIAL_ID, variable: 'KUBECONFIG')]) {
sh 'envsubst < devops/deploy/orders.yaml | kubectl apply -f -'
}
}
}
}
stage('部署outbound到dev环境') {
agent none
steps {
container('maven') {
withCredentials([
kubeconfigFile(credentialsId: env.KUBECONFIG_CREDENTIAL_ID, variable: 'KUBECONFIG')]) {
sh 'envsubst < devops/deploy/outbound.yaml | kubectl apply -f -'
}
}
}
}
stage('部署log到dev环境') {
agent none
steps {
container('maven') {
withCredentials([
kubeconfigFile(credentialsId: env.KUBECONFIG_CREDENTIAL_ID, variable: 'KUBECONFIG')]) {
sh 'envsubst < devops/deploy/log.yaml | kubectl apply -f -'
}
}
}
}
}
}
}
environment {
DOCKER_CREDENTIAL_ID = 'dockerhub-id'
GITHUB_CREDENTIAL_ID = 'github-id'
KUBECONFIG_CREDENTIAL_ID = 'demo-kubeconfig'
REGISTRY = '192.168.0.127:8084'
DOCKERHUB_NAMESPACE = 'onlee'
GITHUB_ACCOUNT = 'kubesphere'
APP_NAME = 'devops-java-sample'
}
parameters {
choice(description: '你需要选择哪条环境进行构建?', name: 'env_name', choices: ["test", "dev", "k8s"])
}
}
pipeline {
agent {
node {
label 'nodejs'
}
}
stages {
stage('拉取代码') {
agent none
steps {
git(url: 'http://192.168.0.126/saas-wms/linkinsense-wms-admin.git', credentialsId: 'gitlab', branch: 'main', changelog: true, poll: false)
}
}
stage('构建代码') {
agent none
steps {
container('nodejs') {
sh 'npm cache clean -f'
sh 'npm config set registry http://registry.npmmirror.com'
sh 'npm install -g n --registry=http://registry.npmmirror.com'
sh 'n v17.9.0'
sh 'node -v'
sh 'npm i'
sh 'npm run build:dev'
}
}
}
stage('构建镜像') {
agent none
steps {
container('nodejs') {
sh 'ls'
sh 'docker build -t wms-web:v1 -f Dockerfile .'
}
}
}
stage('推送镜像') {
agent none
steps {
container('nodejs') {
withCredentials([usernamePassword(credentialsId : 'harbor' ,passwordVariable : 'HARBOR_PWD_VAR' ,usernameVariable : 'HARBOR_USER_VAR' ,)]) {
sh 'echo "$HARBOR_PWD_VAR" | docker login $REGISTRY -u "$HARBOR_USER_VAR" --password-stdin'
sh 'docker tag wms-web:v1 $REGISTRY/$DOCKERHUB_NAMESPACE/wms-web:v1 '
sh 'docker push $REGISTRY/$DOCKERHUB_NAMESPACE/wms-web:v1 '
}
}
}
}
stage('部署项目') {
agent none
steps {
container('nodejs') {
withCredentials([
kubeconfigFile(credentialsId : env.KUBECONFIG_CREDENTIAL_ID ,variable : 'KUBECONFIG' ,)]) {
sh 'envsubst < deploy-dev.yaml | kubectl apply -f -'
}
}
}
}
}
environment {
DOCKER_CREDENTIAL_ID = 'dockerhub-id'
GITHUB_CREDENTIAL_ID = 'github-id'
KUBECONFIG_CREDENTIAL_ID = 'demo-kubeconfig'
REGISTRY = '192.168.0.127:8084'
DOCKERHUB_NAMESPACE = 'onlee'
GITHUB_ACCOUNT = 'kubesphere'
APP_NAME = 'devops-java-sample'
}
}
你知道的越多,你不知道的越多。