文章目录
- 相关文章
- 部署过程
- 准备工作
- 创建 DevOps 项目
- 创建凭证
- 创建流水线
- 编辑流水线
- JAVA后端微服务
- 拉取源码
- 构建源码
- 构建镜像
- 推送镜像
- 部署项目
- VUE前端
- 拉取源码
- 构建源码
- 构建镜像
- 推送镜像
- 部署项目
- 运行流水线
- 查看流水线详情
- 完整流水线脚本
- 微服务后端
- VUE前端
- 参考
相关文章
- kubernetes集群基于kubeadm部署以及常见问题解决
- kubernetes集群配置默认存储类(nfs)
- Docker工作中常用知识总结
- Ubuntu本地安装MySQL8.0以及常见问题设置方法
- kubernetes集群安装Ingress-nginx
- Spring Cloud微服务迁移到Kubernetes容器化
- 持续补充中…
KubeSphere (https://Kubesphere.io) 是在 Kubernetes 之上构建的以应用为中心的多租户容器平台,完全开源,支持多云与多集群管理,提供全栈的 IT 自动化运维的能力,简化企业的 DevOps 工作流。KubeSphere 提供了运维友好的向导式操作界面,帮助企业快速构建一个强大和功能丰富的容器云平台。
部署过程
准备工作
创建 DevOps 项目
DevOps 系统为用户提供了一个自动化的环境,应用可以自动发布到同一个平台。它还兼容第三方私有镜像仓库(如 Harbor)和代码库(如 GitLab/GitHub/SVN/BitBucket)。它为用户提供了全面的、可视化的 CI/CD 流水线,打造了极佳的用户体验,而且这种兼容性强的流水线能力在离线环境中非常有用。
创建凭证
- 在 DevOps 项目设置下的凭证页面创建以下凭证
创建流水线
编辑流水线
- 编辑流水线,可以参考提供的模板,也可以选择
自定义流水线
。
流水线的五个阶段:
拉取源码 -> 构建源码 -> 构建镜像->推送镜像 -> 部署项目
JAVA后端微服务
拉取源码
-
在图形编辑面板上,从类型下拉列表中选择 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/
- 选择添加 添加并行阶段, 重复以上步骤添加其他微服务。
推送镜像
- 点击前一个阶段右侧的加号图标添加一个新的阶段,以推送镜像至Harbor。点击任务下的添加步骤,选择添加凭证。
- 将其填写完成,然后点击确定。
- 凭证名称:选择您创建的 harbor 凭证。
- 密码变量:输入 HARBOR_PWD_VAR。
- 用户名变量:输入 HARBOR_USER_VAR。
出于安全原因,帐户信息在脚本中显示为变量。
- 点击添加嵌套步骤添加一个嵌套步骤。
- 在列表中选择 shell 并在弹出窗口中输入以下命令,点击确定完成操作。
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 -
VUE前端
拉取源码
构建源码
构建镜像
推送镜像
部署项目
运行流水线
查看流水线详情
-
如果所有配置都成功运行,可以看到所有阶段都已完成。
-
在右上角点击查看日志,查看所有日志。点击每个阶段查看其详细日志。您可以根据日志排除故障和问题,也可以将日志下载到本地进行进一步分析。
完整流水线脚本
- 可以在这儿把下面的模板填充进去,然后在这个基础上进行修改。
微服务后端
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"])
}
}
VUE前端
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'
}
}
参考
- KubeSphere 文档
你知道的越多,你不知道的越多。