初始提交
8
.gitignore
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
### IntelliJ IDEA ###
|
||||
.idea
|
||||
*.iws
|
||||
*.iml
|
||||
*.ipr
|
||||
*.lock
|
||||
rebel.xml
|
||||
|
19
README.md
Normal file
@ -0,0 +1,19 @@
|
||||
## 协议和授权
|
||||
|
||||
`mall4cloud` 并非一个开源软件,作者保留全部的权利。 擅自窃用,即属严重侵权行为,与盗窃无异。产生的一切任何后果责任由侵权者自负。
|
||||
|
||||
## 商业使用
|
||||
|
||||
本项目并非一个开源项目,**广州市蓝海创新科技有限公司** 拥该项目的100%版权。
|
||||
|
||||
商用请联系 **广州市蓝海创新科技有限公司** 获取授权,否则产生的一切任何后果责任由侵权者自负。
|
||||
|
||||
## 🚫禁止
|
||||
|
||||
将本项目的部分或全部代码和资源进行任何形式的再发行(上传GitHub、Gitee等任何公开发行的地方)
|
||||
|
||||
## 侵权处理
|
||||
|
||||
- 支付人民币最低 `100万` 到 `侵权数量*商业版售价*10倍` 不等的侵权费用(含我方法律援助费用),本团队已完全委托律师事务所 司法保护
|
||||
|
||||
- 个人行为将直接收集材料邮寄贵司侵权律师函,若出现司法诉讼将直接影响当事人征信档案等特此说明
|
257
app离线打包/Android 打包文档.md
Normal file
@ -0,0 +1,257 @@
|
||||
## Mall4j 商城 Android 打包文档
|
||||
|
||||
文档源自 [uniapp 官方离线打包文档](https://nativesupport.dcloud.net.cn/AppDocs/),如有出入以官网文档为准
|
||||
|
||||
### 准备工作
|
||||
|
||||
Android平台签名证书 [生成指南](https://ask.dcloud.net.cn/article/35777)
|
||||
|
||||
注册Dcloud账号,登录后台创建应用并申请离线打包 [Appkey](https://nativesupport.dcloud.net.cn/AppDocs/usesdk/appkey)
|
||||
|
||||
|
||||
|
||||
### 开发环境
|
||||
|
||||
Android Studio [官方下载](https://developer.android.google.cn/studio/index.html)
|
||||
|
||||
HbulidX [官方下载](https://www.dcloud.io/hbuilderx.html)
|
||||
|
||||
App离线SDK下载 [最新android平台SDK下载](https://nativesupport.dcloud.net.cn/AppDocs/download/android)
|
||||
|
||||
|
||||
|
||||
### SDK目录说明
|
||||
|
||||
```
|
||||
|-- HBuilder-Hello App离线打包演示应用
|
||||
|-- HBuilder-Integrate-AS 集成uni-app的最简示例
|
||||
|-- SDK SDK库文件目录
|
||||
|-- Feature-Android.xls Android平台各扩展Feature API对应的详细配置
|
||||
|-- Readme.txt 版本说明文件及注意事项
|
||||
|-- UniPlugin-Hello-AS uni原生插件开发示例
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 导入工程
|
||||
|
||||
打开 Android Studio 导入 SDK 中的 HBuilder-Integrate-AS 工程
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
导入后 Android Studio 会自动下载项目中用到的资源,默认源是Google,建议科学上网
|
||||
|
||||
|
||||
|
||||
### 工程配置
|
||||
|
||||
**build.gradle**
|
||||
|
||||
将生成的签名证书放入 simpleDemo 目录下
|
||||
打开 simpleDemo/build.gradle 配置文件,修改包名和签名信息
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
```js
|
||||
// 签名信息配置
|
||||
signingConfigs {
|
||||
config {
|
||||
keyAlias 'key0' // 证书别名
|
||||
keyPassword '123456' // 证书密码
|
||||
storeFile file('test.jks') // 证书文件路径
|
||||
storePassword '123456' // 证书文件密码
|
||||
v1SigningEnabled true
|
||||
v2SigningEnabled true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
**Androidmanifest.xml**
|
||||
|
||||
打开 simpleDemo/src/main/Androidmanifest.xml,修改包名,配置Appkey
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
### 图标、启动图以及应用名称
|
||||
|
||||
#### 图标、启动图
|
||||
|
||||
simpleDemo/src/main/res/drawable,icon 为图标,splash 为启动图。可直接替换
|
||||
|
||||
#### **应用名称**
|
||||
|
||||
simpleDemo/src/main/res/values/strings.xml文件,修改“app_name”字段值
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
### 模块及第三方SDK配置
|
||||
|
||||
使用模块或第三方SDK需要引入资源,并添加对应配置。
|
||||
|
||||
#### 第三方SDK配置
|
||||
|
||||
以 [微信支付](https://nativesupport.dcloud.net.cn/AppDocs/usemodule/androidModuleConfig/pay?id=%e5%be%ae%e4%bf%a1%e6%94%af%e4%bb%98) 为例,需要登录 [微信开放平台](https://open.weixin.qq.com/) 创建移动应用,审核成功后获取 微信AppId(appkey) [微信appkey申请方法](http://ask.dcloud.net.cn/article/208)
|
||||
|
||||
1. 引入文件
|
||||
|
||||
在 SDK/libs 目录下,找到 payment-weixin-release.aar 将这个文件放入工程中 simpleDemo/libs 目录;
|
||||
|
||||
将 SDK/src/wxapi 下的 WXPayEntryActivity.java 文件复制到工程 simpleDemo/main/java/包名/wxapi 目录
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
2. 添加配置
|
||||
|
||||
1. Androidmainfest.xml
|
||||
|
||||
需要在application节点前添加权限
|
||||
|
||||
```xml
|
||||
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
|
||||
```
|
||||
|
||||
application节点下配置如下代码
|
||||
|
||||
```xml
|
||||
<meta-data android:name="WX_APPID" android:value="$微信APPID" />
|
||||
<activity android:name="io.dcloud.feature.payment.weixin.WXPayProcessMeadiatorActivity"
|
||||
android:exported="false"
|
||||
android:excludeFromRecents="true"
|
||||
android:theme="@style/ProjectDialogTheme"/>
|
||||
<activity
|
||||
android:name="$你的包名.wxapi.WXPayEntryActivity"
|
||||
android:exported="true"
|
||||
android:theme="@android:style/Theme.Translucent.NoTitleBar"
|
||||
android:launchMode="singleTop" />
|
||||
```
|
||||
|
||||
2. dcloud_properties.xml (assets/data)
|
||||
|
||||
```xml
|
||||
<feature name="Payment" value="io.dcloud.feature.payment.PaymentFeatureImpl">
|
||||
<module name="Payment-Weixin" value="io.dcloud.feature.payment.weixin.WeiXinPay"/>
|
||||
</feature>
|
||||
```
|
||||
|
||||
3. build.gradle (simpleDemo/build.gradle)在主工程的build.gradle文件配置 dependencies
|
||||
|
||||
```json
|
||||
dependencies {
|
||||
implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: [])
|
||||
implementation 'androidx.appcompat:appcompat:1.0.0'
|
||||
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
||||
implementation 'androidx.recyclerview:recyclerview:1.0.0'
|
||||
implementation 'com.facebook.fresco:fresco:2.5.0'
|
||||
implementation "com.facebook.fresco:animated-gif:2.5.0"
|
||||
implementation 'com.github.bumptech.glide:glide:4.9.0'
|
||||
implementation 'com.alibaba:fastjson:1.2.83'
|
||||
implementation 'androidx.webkit:webkit:1.3.0'
|
||||
|
||||
// 微信支付依赖配置
|
||||
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:6.8.0'
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
项目中用到的模块及第三方SDK
|
||||
|
||||
| 模块/第三方SDK | 需要引入的文件 |
|
||||
| ------------------------------------------------------------ | ----------------------------------------------- |
|
||||
| [系统定位](https://nativesupport.dcloud.net.cn/AppDocs/usemodule/androidModuleConfig/geolocation?id=系统定位) | 无需引入文件,需添加配置 |
|
||||
| [支付宝支付](https://nativesupport.dcloud.net.cn/AppDocs/usemodule/androidModuleConfig/pay?id=支付宝) | payment-alipay-release.aar |
|
||||
| [微信支付](https://nativesupport.dcloud.net.cn/AppDocs/usemodule/androidModuleConfig/pay?id=微信支付) | payment-weixin-release.aar |
|
||||
| [VideoPlayer(视频播放)](https://nativesupport.dcloud.net.cn/AppDocs/usemodule/androidModuleConfig/others?id=videoplayer(视频播放)) | media-release.aar、weex_videoplayer-release.aar |
|
||||
| [livepusher(直播推流)](https://nativesupport.dcloud.net.cn/AppDocs/usemodule/androidModuleConfig/others.html#livepusher-%E7%9B%B4%E6%92%AD%E6%8E%A8%E6%B5%81) | weex_livepusher-release.aar |
|
||||
|
||||
|
||||
|
||||
### 导出资源
|
||||
|
||||
用 HbulidX 打开项目,打开 manifest.json 配置文件,修改 uniapp 应用标识(appid) 为 离线AppKey 中的应用id
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
选择项目 -> 发行 -> 原生App-本地打包 -> 生成本地打包App资源,编译完成后控制台会显示资源路径
|
||||
|
||||
或执行命令 npm run build:app-android 编译
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
### 导入资源
|
||||
|
||||
将编译好的app资源拷贝到项目assets->apps下,目录结构如下图
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
修改 assets/data/dcloud_control.xml 中的 appid 为 uni-app 的 id
|
||||
|
||||
|
||||
|
||||
### 打包apk
|
||||
|
||||
Android Studio 菜单选择 Build -> Generate Signed Bund / APK ,弹窗选择 APK,选择打包用的签名,输入签名信息,选择release, 点击 Finish 即可完成打包
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
### 常见问题
|
||||
|
||||
#### 未配置AppKey或配置错误
|
||||
|
||||
1、查看签名文件是否配置到了主APP的build.gradle
|
||||
|
||||
2、查看离线项目中dcloud_control.xml文件中的appid是否与申请AppKey时的appid一致
|
||||
|
||||
3、检测离线项目的包名是否申请AppKey时的包名是否一致
|
||||
|
||||
4、编译完通过apk解压获取一下签名信息与申请AppKey时填写的SHA1一致
|
||||
|
||||
|
||||
|
||||
#### 模拟器中app无法运行
|
||||
|
||||
要在模拟器运行,需要在 simpleDemo 目录下 build.gradle 配置文件 defaultConfig 下 添加配置
|
||||
|
||||
```xml
|
||||
android {
|
||||
defaultConfig {
|
||||
...
|
||||
ndk {
|
||||
abiFilters 'arm64-v8a','armeabi-v7a', 'x86'
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
178
app离线打包/IOS 打包文档.md
Normal file
@ -0,0 +1,178 @@
|
||||
## Mall4j 商城 IOS 打包文档
|
||||
|
||||
文档源自 [uniapp 官方离线打包文档](https://nativesupport.dcloud.net.cn/AppDocs/),如有出入以官网文档为准
|
||||
|
||||
### 准备工作
|
||||
|
||||
[苹果开发者平台](https://developer.apple.com/) 账号,需要加入苹果开发计划,创建App,申请证书,描述文件等
|
||||
|
||||
注册Dcloud账号,登录后台创建应用并申请离线打包 [Appkey](https://nativesupport.dcloud.net.cn/AppDocs/usesdk/appkey)
|
||||
|
||||
|
||||
|
||||
### 开发环境
|
||||
|
||||
macOS Monterey 及以上 (可用虚拟机)
|
||||
|
||||
Xcode 13 及以上版本
|
||||
|
||||
HbulidX
|
||||
|
||||
App离线SDK下载 [最新iOS平台SDK下载](https://nativesupport.dcloud.net.cn/AppDocs/download/ios)
|
||||
|
||||
|
||||
|
||||
### SDK目录说明
|
||||
|
||||
```
|
||||
|-- HBuilder-Hello 给用户打uni-app项目的离线打包工程
|
||||
|-- Feature-iOS.xls 配置表(依赖的库、资源文件、参数配置等)
|
||||
|-- SDK 工程需要的库文件,.h头文件,配置文件,资源文件
|
||||
```
|
||||
|
||||
- 详细说明:[App离线SDK内不同文件的作用](https://nativesupport.dcloud.net.cn/AppDocs/usesdk/iOSReadMe)
|
||||
|
||||
|
||||
|
||||
### 配置工程
|
||||
|
||||
下载离线SDK压缩包,解压;用 Xcode 打开 HBuilder-Hello 项目
|
||||
|
||||
|
||||
|
||||
#### 配置Appkey
|
||||
|
||||
打开 HBuilder-Hello -> Supporting Files -> HBuilder-Hello-Info,找到 dcloud_appkey,填入appKey
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
#### 生成本地打包app资源
|
||||
|
||||
用 HbulidX 打开项目,选择菜单 发行 -> 原生App-本地打包 -> 生成本地打包App资源
|
||||
|
||||
或执行命令 npm run build:app-ios 编译
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
#### 导入打包资源到xcode
|
||||
|
||||
把生成好的本地打包app资源复制到 xcode 项目目录下的 Pandora -> apps 路径下,替换掉原来的
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
#### 修改 control.xml 文件
|
||||
|
||||
打开 Xcode 工程Supporting Files -> control.xml文件修改 appid 值,改成和manifest.json里面的id一样
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
#### 修改应用信息
|
||||
|
||||
按图示箭头从左往右依次点击 HBuilder-Hello -> TARGETS 下的 HBuilder
|
||||
|
||||
在General下修改应用名称、包名、版本名称、版本号
|
||||
|
||||
Display Name是app名称
|
||||
|
||||
Bundle Identifier为苹果的AppID
|
||||
|
||||
Version为应用版本号,在App Store中显示的版本号,推荐与manifest.json中version下的name值一致;
|
||||
|
||||
Build为编译版本号,App Store判断升级使用,推荐与manifest.json中version下的code值一致。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
##### **修改app名称**
|
||||
|
||||
即使修改了Display Name,打包后的app名称依然是"Hbuilder你好";需要改一下 InfoPlist.strings 下面的 CFBundleDisplayName 为应用名字,InfoPlist.strings(English)为英文系统应用名,Simplified为中文简体系统应用名
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
##### **修改app图标**
|
||||
|
||||
按图示箭头从左往右依次点击 HBuilder-Hello -> TARGETS 下的 HBuilder
|
||||
|
||||
在General下 找到 App Icons and Launch Images 点击小箭头
|
||||
|
||||

|
||||
|
||||
在 HBuilderX 中打开 mainfest.json,在 App图标配置中 使用自动生成图标功能,然后把生成的图标拖动到 xcode 中 Images 对应的每个大小的位置中 即可完成配置
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
##### **配置应用签名**
|
||||
|
||||
配置 xcode 自动签名:
|
||||
|
||||
打开 xcode 配置,切换到 Account 选项,添加已完成签名申请的苹果开发者账号
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
如图示打开 Signing & CapaBilities,勾选 "Automatically manage signing",选择一下 Team(如果没有的话,创建一个),填一下Bundle Identifier
|
||||
|
||||

|
||||
|
||||
签名常见错误1
|
||||
|
||||

|
||||
|
||||
切换到选择卡“Build Settings” 搜索签名 “Signing” ;
|
||||
然后在列出的代码签名标识中把值设置为 “Apple Development”;
|
||||
|
||||
签名常见错误2
|
||||
|
||||

|
||||
|
||||
切换到选择卡“Build Settings” 搜索签名 “ Provision”,(快捷键command+delete)删除User-Defined下面的PROVISIONING_PROFILE
|
||||
|
||||
|
||||
|
||||
### 第三方模块配置
|
||||
|
||||
项目目前使用到模块/第三方SDK包含 定位、微信支付、支付宝支付、视频播放。
|
||||
具体配置方法可参考uniapp官网 [模块/三方SDK配置介绍](https://nativesupport.dcloud.net.cn/AppDocs/usemodule/iOSModuleConfig/common)
|
||||
|
||||
|
||||
|
||||
### 打包上传
|
||||
|
||||
点击 Xcode 中部项目名称,设置编译配置,选择 Any iOS Device (arm64, armv7)
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
点击 Product 菜单,Archive 选项
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
待编译完成后会自动弹出 Archives ,点击 右上角 Distribute App ,准备上传
|
||||
|
||||
Archives 弹窗可通过 Window -> Organizer 菜单打开
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
后续的弹窗一路 next ,最后签名完毕后点击 upload 上传
|
||||
|
||||

|
||||
|
201
devops指南/1.jenkins与harbor安装.md
Normal file
@ -0,0 +1,201 @@
|
||||
### 1. maven
|
||||
|
||||
1. 下载maven,地址:https://maven.apache.org/download.cgi
|
||||
2. 上传到服务器解压
|
||||
|
||||
```
|
||||
tar -zxvf apache-maven-3.8.6-bin.tar.gz -C /usr/local/
|
||||
```
|
||||
|
||||
3.重命名
|
||||
|
||||
```
|
||||
mv /usr/local/apache-maven-3.8.6 /usr/local/maven
|
||||
```
|
||||
|
||||
### 2. jdk
|
||||
|
||||
1. 下载maven,用华为云的地址:https://repo.huaweicloud.com/java/jdk/8u201-b09/jdk-8u201-linux-x64.tar.gz
|
||||
2. 上传到服务器解压
|
||||
|
||||
```
|
||||
tar -zxvf jdk-8u201-linux-x64.tar.gz -C /usr/local/
|
||||
```
|
||||
|
||||
3.重命名
|
||||
|
||||
```
|
||||
mv /usr/local/jdk1.8.0_201 /usr/local/jdk
|
||||
```
|
||||
|
||||
### 3. jenkins
|
||||
|
||||
> jeknins用docker安装,不知道如何安装docker的,可以参考docker的安装教程
|
||||
|
||||
|
||||
|
||||
jenkins用lts版本,用docker-compose安装
|
||||
|
||||
```
|
||||
# 创建文件夹存放jenkins的数据
|
||||
mkdir -p /usr/local/docker/jenkins/data
|
||||
# 进到文件夹
|
||||
cd /usr/local/jenkins
|
||||
# 给这个目录赋予操作权限,供 jenkins 容器进行访问,不赋予权限的话,容器中的 jenkins 用户无法读取宿主机的这个文件;
|
||||
chmod 777 /usr/local/docker/jenkins/data
|
||||
|
||||
# 放入maven和jdk
|
||||
mv /usr/local/maven /usr/local/docker/jenkins/data/maven
|
||||
mv /usr/local/jdk /usr/local/docker/jenkins/data/jdk
|
||||
|
||||
# 让jenkins可以使用宿主机的docker
|
||||
chown root:root /var/run/docker.sock
|
||||
chmod o+rw /var/run/docker.sock
|
||||
```
|
||||
|
||||
编辑 docker-compose
|
||||
|
||||
`vi /usr/local/docker/jenkins/docker-compose.yml`
|
||||
|
||||
内容如下
|
||||
```
|
||||
version: '3.1'
|
||||
services:
|
||||
jenkins:
|
||||
image: 'jenkins/jenkins:lts'
|
||||
container_name: jenkins
|
||||
restart: always
|
||||
ports:
|
||||
- '8080:8080'
|
||||
- '50000:50000'
|
||||
volumes:
|
||||
- './data/:/var/jenkins_home/'
|
||||
- '/var/run/docker.sock:/var/run/docker.sock'
|
||||
- '/usr/bin/docker:/usr/bin/docker'
|
||||
- '/etc/docker/daemon.json:/etc/docker/daemon.json'
|
||||
```
|
||||
启动
|
||||
```
|
||||
cd /usr/local/docker/jenkins
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
启动jenkins之后除了默认的插件,还要安装`publisher over ssh` 和 `nodejs` 插件
|
||||
|
||||
在jenkins当中,还要将`maven`,`jdk`,`nodejs`的之前下载好放入jenkins的路径写进去,不要让jenkins自己安装
|
||||
|
||||
|
||||
|
||||
jenkins 在设置里面找到脚本命令行,运行这行命令
|
||||
```
|
||||
hudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION = true
|
||||
```
|
||||
安装 Build Authorization Token Root 插件
|
||||
|
||||
安装该插件后,就可以通过 https://jenkins.mall4j.com/buildByToken/build?job=NAME&token=SECRET 地址来触发 job 了,此时不需要将 job 设置为匿名可访问也可以正常触发。
|
||||
|
||||
|
||||
jenkins 在设置里面找到脚本命令行,运行这行命令
|
||||
```
|
||||
System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')
|
||||
```
|
||||
|
||||
### 4. harbor
|
||||
|
||||
1. 下载harbor(2.x),地址:https://github.com/goharbor/harbor/releases
|
||||
2. 上传到服务器解压
|
||||
|
||||
```
|
||||
tar -zxvf harbor-offline-installer-v2.6.0.tgz -C /usr/local/docker
|
||||
```
|
||||
|
||||
3.修改配置文件
|
||||
|
||||
```
|
||||
cd /usr/local/docker/harbor/
|
||||
|
||||
cp harbor.yml.tmpl harbor.yml
|
||||
|
||||
vi harbor.yml
|
||||
```
|
||||
改掉 hostname,注掉https相关信息,修改默认密码harbor_admin_password
|
||||
```
|
||||
hostname: 192.168.1.11
|
||||
# https related config
|
||||
#https:
|
||||
# https port for harbor, default is 443
|
||||
# port: 443
|
||||
# The path of cert and key files for nginx
|
||||
# certificate: /your/certificate/path
|
||||
# private_key: /your/private/key/path
|
||||
|
||||
harbor_admin_password: 123456
|
||||
```
|
||||
|
||||
4. 安装
|
||||
```
|
||||
./install.sh
|
||||
```
|
||||
|
||||
5.所有要用到这个harbor的服务器,都要配置仓库地址
|
||||
|
||||
```
|
||||
vi /etc/docker/daemon.json
|
||||
```
|
||||
增加一条
|
||||
```
|
||||
"insecure-registries":["192.168.1.11:80"]
|
||||
```
|
||||
重启docker
|
||||
```
|
||||
systemctl daemon-reload
|
||||
systemctl restart docker
|
||||
```
|
||||
|
||||
6. 假如重启docker后harbor有问题,要重新跑一遍harbor的docker-compose
|
||||
```
|
||||
cd /usr/local/docker/harbor/
|
||||
docker-compose stop
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
## 设置开机自启
|
||||
|
||||
|
||||
```
|
||||
cd /etc/rc.d/init.d/
|
||||
```
|
||||
|
||||
创建自启脚本`vi autostart.sh`内容如下
|
||||
```
|
||||
#!/bin/sh
|
||||
#chkconfig: 2345 80 90
|
||||
#description: 开机自启动脚本
|
||||
|
||||
# harbor启动是需要顺序的,docker关闭之后,由docker启动的不太行,要docker-compose进行启动
|
||||
cd /usr/local/docker/harbor/
|
||||
docker-compose restart
|
||||
|
||||
cd /usr/local/docker/jenkins/
|
||||
docker-compose restart
|
||||
|
||||
# 让jenkins可以使用宿主机的docker 虽然加到了开机自启,但是不知道为何这个不会生效。所以每次重启,都需要重新执行一下下面两条命令
|
||||
chown root:root /var/run/docker.sock
|
||||
chmod o+rw /var/run/docker.sock
|
||||
```
|
||||
|
||||
增加脚本的可执行权限
|
||||
|
||||
```
|
||||
chmod +x autostart.sh
|
||||
```
|
||||
|
||||
把服务添加到chkconfig列表
|
||||
```
|
||||
chkconfig --add autostart.sh
|
||||
```
|
||||
|
||||
查看服务自启动状态(如果2~5都是on,就表明会自动启动了)
|
||||
```
|
||||
chkconfig --list autostart.sh
|
||||
```
|
220
devops指南/2.k8s安装.md
Normal file
@ -0,0 +1,220 @@
|
||||
需要一个master节点,一个worker节点
|
||||
|
||||
主节点需要组件
|
||||
- docker(也可以是其他容器运行时)
|
||||
- kubectl 集群命令行交互工具
|
||||
- kubeadm 集群初始化工具
|
||||
|
||||
|
||||
工作节点需要组件
|
||||
- docker(也可以是其他容器运行时)
|
||||
- kubelet 管理 Pod 和容器,确保他们健康稳定运行。
|
||||
- kube-proxy 网络代理,负责网络相关的工作
|
||||
|
||||
|
||||
```
|
||||
# 关闭selinux
|
||||
# 临时禁用selinux
|
||||
setenforce 0
|
||||
|
||||
# 禁用交换分区
|
||||
swapoff -a
|
||||
# 永久禁用,打开/etc/fstab注释掉swap那一行。
|
||||
sed -i 's/.*swap.*/#&/' /etc/fstab
|
||||
|
||||
|
||||
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
|
||||
|
||||
# 删除之前的cni 网络信息
|
||||
ip link set cni0 down
|
||||
brctl delbr cni0
|
||||
|
||||
# 安装依赖
|
||||
yum install -y epel-release conntrack ipvsadm ipset jq sysstat curl iptables libseccomp
|
||||
|
||||
# 关闭防火墙
|
||||
systemctl disable firewalld && systemctl stop firewalld
|
||||
|
||||
# 设置iptables
|
||||
iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT
|
||||
|
||||
# 禁用 SELinux
|
||||
# 永久关闭 修改/etc/sysconfig/selinux文件设置
|
||||
sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
|
||||
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
|
||||
|
||||
# 加载内核模块
|
||||
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
|
||||
#!/bin/bash
|
||||
modprobe -- ip_vs
|
||||
modprobe -- ip_vs_rr
|
||||
modprobe -- ip_vs_wrr
|
||||
modprobe -- ip_vs_sh
|
||||
modprobe -- nf_conntrack_ipv4
|
||||
modprobe -- br_netfilter
|
||||
EOF
|
||||
|
||||
# 修改访问权限
|
||||
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules
|
||||
|
||||
# 配置内核参数,将桥接的IPv4流量传递到iptables的链
|
||||
cat << EOF | tee /etc/sysctl.d/k8s.conf
|
||||
net.bridge.bridge-nf-call-iptables=1
|
||||
net.bridge.bridge-nf-call-ip6tables=1
|
||||
net.ipv4.ip_forward=1
|
||||
net.ipv4.tcp_tw_recycle=0
|
||||
vm.swappiness=0
|
||||
vm.overcommit_memory=1
|
||||
vm.panic_on_oom=0
|
||||
fs.inotify.max_user_watches=89100
|
||||
fs.file-max=52706963
|
||||
fs.nr_open=52706963
|
||||
net.ipv6.conf.all.disable_ipv6=1
|
||||
net.netfilter.nf_conntrack_max=2310720
|
||||
EOF
|
||||
|
||||
sysctl -p /etc/sysctl.d/k8s.conf
|
||||
|
||||
|
||||
# docker 安装:
|
||||
# 安装docker所需的工具
|
||||
yum install -y yum-utils device-mapper-persistent-data lvm2
|
||||
|
||||
# 配置阿里云的docker源
|
||||
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
|
||||
|
||||
# 安装 docker-ce docker-ce-cli
|
||||
yum makecache fast
|
||||
yum install -y docker-ce docker-ce-cli
|
||||
|
||||
# 安装完成后配置启动时的命令,否则 docker 会将 iptables FORWARD chain 的默认策略设置为DROP
|
||||
sed -i "13i ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT" /usr/lib/systemd/system/docker.service
|
||||
|
||||
# 启动docker
|
||||
systemctl enable docker && systemctl start docker
|
||||
|
||||
# Kubernetes 默认设置cgroup驱动位为 "systemd" ,而 Docker 服务的cgroup驱动默认为 "cgroupfs",
|
||||
# insecure-registries 里面的ip和端口改成harbor所在的ip和端口
|
||||
# 建议将其修改为 “systemd", 与 Kubernetes 保持一致 ##
|
||||
tee /etc/docker/daemon.json <<-'EOF'
|
||||
{
|
||||
"registry-mirrors": ["https://0hz7oz4n.mirror.aliyuncs.com"],
|
||||
"exec-opts": ["native.cgroupdriver=systemd"],
|
||||
"insecure-registries":["192.168.1.11:80"],
|
||||
"log-driver": "json-file",
|
||||
"log-opts": {
|
||||
"max-size": "100m","max-file": "1"
|
||||
},
|
||||
"storage-driver": "overlay2",
|
||||
"storage-opts": [
|
||||
"overlay2.override_kernel_check=true"
|
||||
]
|
||||
}
|
||||
EOF
|
||||
|
||||
|
||||
# 重启Docker 服务
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl restart docker
|
||||
|
||||
|
||||
# 添加阿里云的K8S源: k8s-master k8s-node1 k8s-node2
|
||||
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
|
||||
[kubernetes]
|
||||
name=Kubernetes
|
||||
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
|
||||
enabled=1
|
||||
gpgcheck=0
|
||||
repo_gpgcheck=0
|
||||
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
|
||||
EOF
|
||||
|
||||
# 检查一下最新的1.23的版本
|
||||
yum list --showduplicates kubeadm --disableexcludes=kubernetes
|
||||
|
||||
|
||||
# 每个节点分别设置对应主机名
|
||||
hostnamectl set-hostname k8s-master
|
||||
hostnamectl set-hostname k8s-node1
|
||||
hostnamectl set-hostname k8s-node2
|
||||
|
||||
# 所有节点都修改 hosts
|
||||
vi /etc/hosts
|
||||
192.168.1.5 k8s-master
|
||||
192.168.193.128 k8s-node1
|
||||
192.168.1.18 k8s-node2
|
||||
|
||||
|
||||
# 安装kubeadm kubectl kubelet 1.23.12(大于等于24的话,docker就不能愉快工作了)
|
||||
# 主节点
|
||||
yum install -y kubelet-1.23.12 kubectl-1.23.12 kubeadm-1.23.12
|
||||
|
||||
# node节点
|
||||
yum install -y kubelet-1.23.12 kubectl-1.23.12 kubeadm-1.23.12
|
||||
echo 'KUBELET_EXTRA_ARGS="--runtime-cgroups=/systemd/system.slice --kubelet-cgroups=/systemd/system.slice"' > /etc/sysconfig/kubelet
|
||||
|
||||
|
||||
# 启动kubelet服务
|
||||
systemctl enable kubelet && systemctl start kubelet
|
||||
|
||||
# 查看已经安装的版本
|
||||
kubelet --version
|
||||
```
|
||||
|
||||
二. 初始化 k8s-master 环境 或 kubeadm reset 后都要按以下步骤执行, IP地址需根据实际情况调整
|
||||
|
||||
|
||||
```
|
||||
# 因为需要下载 images 需要一些时间, 这里会等待一会儿, IP 按当前网络环境自行修改:
|
||||
# 说明: https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm-init/
|
||||
kubeadm init \
|
||||
--kubernetes-version=1.23.12 \
|
||||
--apiserver-advertise-address=192.168.1.5 \
|
||||
--image-repository registry.aliyuncs.com/google_containers \
|
||||
--service-cidr=10.1.0.0/16 \
|
||||
--pod-network-cidr=10.244.0.0/16
|
||||
```
|
||||
|
||||
|
||||
命令说明:
|
||||
|
||||
–pod-network-cidr: 定义pod网段为:10.244.0.0/16
|
||||
|
||||
–apiserver-advertise-address:master主机内网IP地址
|
||||
|
||||
–image-repository:指定阿里云镜像仓库地址。由于kubeadm 默认从官网http://k8s.grc.io下载所需镜像,国内无法访问,因此需要通过–image-repository指定阿里云镜像仓库地址。
|
||||
|
||||
集群初始化会出现如下结果
|
||||
|
||||
Your Kubernetes control-plane has initialized successfully!
|
||||
|
||||
|
||||
上面安装完后,会提示你输入如下命令,复制粘贴过来,执行即可。
|
||||
|
||||
```
|
||||
# 上面安装完成后,k8s会提示你输入如下命令,执行
|
||||
mkdir -p $HOME/.kube
|
||||
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
|
||||
sudo chown $(id -u):$(id -g) $HOME/.kube/config
|
||||
```
|
||||
|
||||
如果是root用户请执行: 最好加入到 .zshrc .bashrc, 此处有疑问.... TODO:
|
||||
```
|
||||
export KUBECONFIG=/etc/kubernetes/admin.conf
|
||||
```
|
||||
|
||||
node机上执行: 此时执行会报错并且执行不成功, 请稍等执行好flannel 再到node机上执行: 如忘记: 可使用命令 kubeadm token create --print-join-command 查看:
|
||||
```
|
||||
kubeadm join 192.168.1.5:6443 --token zxk5dz.es4kdp9ahxydsk5i \
|
||||
--discovery-token-ca-cert-hash sha256:a5f29decea10aecf53cb174b22120095dade42303b34b5d4f5ea7e0bf4fb00b8
|
||||
```
|
||||
|
||||
配置: kube-flannel.yml
|
||||
```
|
||||
# 服务器没办法访问的话,直接把这个地址在浏览器打开,然后下载下来也可以
|
||||
curl -k -O https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
|
||||
kubectl apply -f kube-flannel.yml
|
||||
```
|
||||
|
||||
重要: ok, 此时去node机上执行 kubeadm join 即可, 这时在node执行 join 时会自动生 /run/flannel/subnet.env 文件, 而不会再报找不到文件的错误!
|
||||
|
29
devops指南/3.nfs安装.md
Normal file
@ -0,0 +1,29 @@
|
||||
1、所有节点
|
||||
```
|
||||
#所有机器安装
|
||||
yum install -y nfs-utils
|
||||
```
|
||||
|
||||
2、主节点
|
||||
```
|
||||
#nfs主节点
|
||||
echo "/nfs/data/ *(insecure,rw,sync,no_root_squash)" > /etc/exports
|
||||
|
||||
mkdir -p /nfs/data
|
||||
systemctl enable rpcbind --now
|
||||
systemctl enable nfs-server --now
|
||||
#配置生效
|
||||
exportfs -r
|
||||
```
|
||||
|
||||
3、从节点
|
||||
```
|
||||
showmount -e 主节点ip
|
||||
|
||||
#执行以下命令挂载 nfs 服务器上的共享目录到本机路径 /root/nfsmount
|
||||
mkdir -p /nfs/data
|
||||
|
||||
mount -t nfs 主节点ip:/nfs/data /nfs/data
|
||||
# 写入一个测试文件
|
||||
echo "hello nfs server" > /nfs/data/test.txt
|
||||
```
|
50
devops指南/4.创建一些账号,以及名命空间.md
Normal file
@ -0,0 +1,50 @@
|
||||
|
||||
1. 创建在harbor上创建个名命空间,创建完之后,要在jekninsfile改成对应的名命空间。
|
||||
|
||||
2. 在k8s当中创建一个和harbor当中一样的名命空间。这个名命空间要在jenkinsfile当中进行编辑。目前就叫做`mall4cloud-release`
|
||||
|
||||
3. 为jenkins创建git账号与harbor账号
|
||||
|
||||
在jenkins-系统管理配置-Manage Credentials-全局(Manage Credentials这个管理界面下面有个列表,列表域下面有个全局)-添加凭据
|
||||
|
||||
如果无法手动进入的话,可以访问 `jenkins域名+/credentials/store/system/domain/_/`
|
||||
|
||||
添加两个凭据把git和harbor的用户名和密码放进去保存。
|
||||
|
||||
4. 根据本目录下的jenkinsfile文件夹,在jenkins当中添加不同的”流水线“任务,任务名和文件名可以类似。
|
||||
|
||||
5. 修改jenkinsfile里面的GIT_CREDENTIAL_ID与HARBOR_CREDENTIAL_ID让jenkins可以访问到。
|
||||
|
||||
6. 修改jenkinsfile里面的environment配置,改成自己的环境。复制进去jenkins的流水线脚本框内保存。前端的jenkinsfile要改掉里面的域名。
|
||||
|
||||
7. 在nfs当中的`/nfs/data`下,创建几个放中间件需要的文件夹,将`开发环境搭建`当中的`中间件docker-compose一键安装`里面的内容进行阅读。并把里面的文件夹的内容放到对应的nfs的文件夹当中。
|
||||
|
||||
```shell
|
||||
mkdir mall4j-middleware
|
||||
mkdir mall4cloud-release
|
||||
cd mall4j-middleware
|
||||
mkdir mall4j-canal
|
||||
mkdir mall4j-elasticsearch
|
||||
mkdir mall4j-minio
|
||||
mkdir mall4j-mongo
|
||||
mkdir mall4j-mysql
|
||||
mkdir mall4j-nacos
|
||||
mkdir mall4j-nginx
|
||||
mkdir mall4j-rocketmq
|
||||
mkdir mall4j-seata
|
||||
mkdir mall4j-aof-redis
|
||||
mkdir mall4j-shardingsphere
|
||||
```
|
||||
|
||||
9. 创建中间件所在的名命空间,起名为`mall4j-middleware`,将`mall4j-middleware.yaml`导入,注意里面的配置是否与nfs当中的ip和环境变量之类的一致。
|
||||
|
||||
10. 创建商城容器的名命空间,起名为`mall4cloud-release`,将`mall4cloud-release.yaml`导入,注意里面的ip之类的会不会有问题。还要在`mall4cloud-release`当中创建harbor的密文,起名为harbor。
|
||||
|
||||
否则里面的yaml里面的配置无效,就没办法拉取镜像了。
|
||||
```
|
||||
imagePullSecrets:
|
||||
- name: harbor
|
||||
```
|
||||
|
||||
|
||||
|
29
devops指南/README.md
Normal file
@ -0,0 +1,29 @@
|
||||
因为我们不是专业的讲师,所以专业的讲课交给专业的人处理。
|
||||
|
||||
如果想要了解devops的可以看下:https://www.bilibili.com/video/BV13Y411E7nd
|
||||
|
||||
nfs的概念可以看下这个:https://www.bilibili.com/video/BV13Q4y1C7hS/?p=63
|
||||
|
||||
|
||||
jenkins点击部署大概会经历以下几个流程:
|
||||
1. 在jenkins内部对代码进行打包(maven或者npm)进行打包。
|
||||
2. 然后用docker进行build构建镜像。
|
||||
3. 将已经构建好的docker镜像放到harbor当中。
|
||||
4. 通知k8s拉取harbor当中的镜像部署。
|
||||
|
||||
因此需要安装jenkins、harbor、k8s。推荐 jenkins和harbor放在一台硬盘容量的机器,比如1t的硬盘。
|
||||
|
||||
如果只是测试环境:k8s至少需要一台master(2核4g),一台node(8核32g)。
|
||||
|
||||
如果是生产环境:k8s至少需要一台master(2核4g),node节点不限台,内存加起来起码要超过64g。
|
||||
|
||||
因为用上了k8s,所以有公共存储的概念,还需要一台机器作为nfs。
|
||||
|
||||
一共至少需要4台机器:
|
||||
1. 一台`jenkins+harbor`(1t硬盘)
|
||||
2. 一台k8s master(2核4g)
|
||||
3. 一台k8s node(8核32g)
|
||||
4. 一台nfs(1t硬盘)
|
||||
|
||||
|
||||
|
55
devops指南/jenkinsfile/mall4cloud-h5-release.jenkinsfile
Normal file
@ -0,0 +1,55 @@
|
||||
pipeline {
|
||||
agent any
|
||||
|
||||
environment {
|
||||
// git账号,不用改
|
||||
GIT_CREDENTIAL_ID = '175776d4-6bbc-4da1-ace2-f2a89453fba4'
|
||||
// git地址
|
||||
GIT_ADDRESS = 'https://git.mall4j.com/mall4cloud/mall4cloud-uniapp'
|
||||
// git分支
|
||||
GIT_BRANCH = 'master'
|
||||
|
||||
// harbor账号,不用改
|
||||
HARBOR_CREDENTIAL_ID = 'edd44d2d-f182-40ab-8e72-b4fcae6f793f'
|
||||
// harbor地址
|
||||
HARBOR_ADDR = '192.168.1.11:80'
|
||||
// 名命空间
|
||||
NAMESPACE = 'mall4cloud-release'
|
||||
}
|
||||
stages {
|
||||
stage ('拉取git仓库代码') {
|
||||
steps {
|
||||
checkout([$class: 'GitSCM', branches: [[name: '*/' + "$GIT_BRANCH"]], extensions: [], userRemoteConfigs: [[credentialsId: "$GIT_CREDENTIAL_ID", url: "$GIT_ADDRESS"]]])
|
||||
}
|
||||
}
|
||||
stage ('通过npm构建项目') {
|
||||
steps {
|
||||
sh '''export PATH=/var/jenkins_home/nodejs/bin:$PATH
|
||||
rm -f .env.production
|
||||
tee ./.env.production <<-'EOF'
|
||||
VITE_APP_MP_APPID = 'wx42bbe857570c5b40'
|
||||
VITE_APP_RESOURCES_URL = 'https://mall4j-minio.mall4j.com/mall4cloud'
|
||||
VITE_APP_BASE_API = 'https://cloud-api.mall4j.com'
|
||||
VITE_APP_WS_IM_API = 'wss://cloud-api.mall4j.com'
|
||||
VITE_APP_DOMAIN_ADDRESS = 'https://h5.mall4j.com/cloud'
|
||||
EOF
|
||||
|
||||
npm config set registry https://registry.npmmirror.com
|
||||
pnpm install --no-frozen-lockfile
|
||||
pnpm run build:h5'''
|
||||
}
|
||||
}
|
||||
stage('构建mall4cloud-h5镜像') {
|
||||
steps {
|
||||
withEnv(["PROJECT_NAME=mall4cloud-h5"]) {
|
||||
sh 'docker build -t $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER .'
|
||||
withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,credentialsId : "$HARBOR_CREDENTIAL_ID" ,)]) {
|
||||
sh 'echo "$DOCKER_PASSWORD" | docker login $HARBOR_ADDR -u "$DOCKER_USERNAME" --password-stdin'
|
||||
sh 'docker push $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER'
|
||||
sh 'ssh root@192.168.1.5 kubectl set image deploy/$PROJECT_NAME $PROJECT_NAME=$HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER -n $NAMESPACE'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
217
devops指南/jenkinsfile/mall4cloud-java-release.jenkinsfile
Normal file
@ -0,0 +1,217 @@
|
||||
pipeline {
|
||||
agent any
|
||||
|
||||
environment {
|
||||
// git账号
|
||||
GIT_CREDENTIAL_ID = '175776d4-6bbc-4da1-ace2-f2a89453fba4'
|
||||
// git地址
|
||||
GIT_ADDRESS = 'https://git.mall4j.com/mall4cloud/mall4cloud'
|
||||
// git分支
|
||||
GIT_BRANCH = 'master'
|
||||
|
||||
// harbor账号
|
||||
HARBOR_CREDENTIAL_ID = 'edd44d2d-f182-40ab-8e72-b4fcae6f793f'
|
||||
// harbor地址
|
||||
HARBOR_ADDR = '192.168.1.11:80'
|
||||
// 名命空间
|
||||
NAMESPACE = 'mall4cloud-release'
|
||||
}
|
||||
stages {
|
||||
stage ('拉取git仓库代码') {
|
||||
steps {
|
||||
checkout([$class: 'GitSCM', branches: [[name: '*/' + "$GIT_BRANCH"]], extensions: [], userRemoteConfigs: [[credentialsId: "$GIT_CREDENTIAL_ID", url: "$GIT_ADDRESS"]]])
|
||||
}
|
||||
}
|
||||
stage ('通过maven构建项目') {
|
||||
steps {
|
||||
// 构建项目
|
||||
sh '/var/jenkins_home/maven/bin/mvn -T 1C clean package -DskipTests=true'
|
||||
}
|
||||
}
|
||||
stage ('通过docker并行制作镜像') {
|
||||
|
||||
parallel {
|
||||
stage('构建mall4cloud-auth镜像') {
|
||||
steps {
|
||||
withEnv(["PROJECT_NAME=mall4cloud-auth"]) {
|
||||
sh 'cd ./$PROJECT_NAME && docker build -t $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER .'
|
||||
withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,credentialsId : "$HARBOR_CREDENTIAL_ID" ,)]) {
|
||||
sh 'echo "$DOCKER_PASSWORD" | docker login $HARBOR_ADDR -u "$DOCKER_USERNAME" --password-stdin'
|
||||
sh 'docker push $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER'
|
||||
sh 'ssh root@192.168.1.5 kubectl set image deploy/$PROJECT_NAME $PROJECT_NAME=$HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER -n $NAMESPACE'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('构建mall4cloud-biz镜像') {
|
||||
steps {
|
||||
withEnv(["PROJECT_NAME=mall4cloud-biz"]) {
|
||||
sh 'cd ./$PROJECT_NAME && docker build -t $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER .'
|
||||
withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,credentialsId : "$HARBOR_CREDENTIAL_ID" ,)]) {
|
||||
sh 'echo "$DOCKER_PASSWORD" | docker login $HARBOR_ADDR -u "$DOCKER_USERNAME" --password-stdin'
|
||||
sh 'docker push $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER'
|
||||
sh 'ssh root@192.168.1.5 kubectl set image deploy/$PROJECT_NAME $PROJECT_NAME=$HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER -n $NAMESPACE'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('构建mall4cloud-marketing镜像') {
|
||||
steps {
|
||||
withEnv(["PROJECT_NAME=mall4cloud-marketing"]) {
|
||||
sh 'cd ./$PROJECT_NAME && docker build -t $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER .'
|
||||
withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,credentialsId : "$HARBOR_CREDENTIAL_ID" ,)]) {
|
||||
sh 'echo "$DOCKER_PASSWORD" | docker login $HARBOR_ADDR -u "$DOCKER_USERNAME" --password-stdin'
|
||||
sh 'docker push $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER'
|
||||
sh 'ssh root@192.168.1.5 kubectl set image deploy/$PROJECT_NAME $PROJECT_NAME=$HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER -n $NAMESPACE'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('构建mall4cloud-flow镜像') {
|
||||
steps {
|
||||
withEnv(["PROJECT_NAME=mall4cloud-flow"]) {
|
||||
sh 'cd ./$PROJECT_NAME && docker build -t $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER .'
|
||||
withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,credentialsId : "$HARBOR_CREDENTIAL_ID" ,)]) {
|
||||
sh 'echo "$DOCKER_PASSWORD" | docker login $HARBOR_ADDR -u "$DOCKER_USERNAME" --password-stdin'
|
||||
sh 'docker push $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER'
|
||||
sh 'ssh root@192.168.1.5 kubectl set image deploy/$PROJECT_NAME $PROJECT_NAME=$HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER -n $NAMESPACE'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('构建mall4cloud-gateway镜像') {
|
||||
steps {
|
||||
withEnv(["PROJECT_NAME=mall4cloud-gateway"]) {
|
||||
sh 'cd ./$PROJECT_NAME && docker build -t $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER .'
|
||||
withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,credentialsId : "$HARBOR_CREDENTIAL_ID" ,)]) {
|
||||
sh 'echo "$DOCKER_PASSWORD" | docker login $HARBOR_ADDR -u "$DOCKER_USERNAME" --password-stdin'
|
||||
sh 'docker push $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER'
|
||||
sh 'ssh root@192.168.1.5 kubectl set image deploy/$PROJECT_NAME $PROJECT_NAME=$HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER -n $NAMESPACE'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('构建mall4cloud-group镜像') {
|
||||
steps {
|
||||
withEnv(["PROJECT_NAME=mall4cloud-group"]) {
|
||||
sh 'cd ./$PROJECT_NAME && docker build -t $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER .'
|
||||
withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,credentialsId : "$HARBOR_CREDENTIAL_ID" ,)]) {
|
||||
sh 'echo "$DOCKER_PASSWORD" | docker login $HARBOR_ADDR -u "$DOCKER_USERNAME" --password-stdin'
|
||||
sh 'docker push $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER'
|
||||
sh 'ssh root@192.168.1.5 kubectl set image deploy/$PROJECT_NAME $PROJECT_NAME=$HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER -n $NAMESPACE'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('构建mall4cloud-im镜像') {
|
||||
steps {
|
||||
withEnv(["PROJECT_NAME=mall4cloud-im"]) {
|
||||
sh 'cd ./$PROJECT_NAME && docker build -t $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER .'
|
||||
withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,credentialsId : "$HARBOR_CREDENTIAL_ID" ,)]) {
|
||||
sh 'echo "$DOCKER_PASSWORD" | docker login $HARBOR_ADDR -u "$DOCKER_USERNAME" --password-stdin'
|
||||
sh 'docker push $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER'
|
||||
sh 'ssh root@192.168.1.5 kubectl set image deploy/$PROJECT_NAME $PROJECT_NAME=$HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER -n $NAMESPACE'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('构建mall4cloud-leaf镜像') {
|
||||
steps {
|
||||
withEnv(["PROJECT_NAME=mall4cloud-leaf"]) {
|
||||
sh 'cd ./$PROJECT_NAME && docker build -t $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER .'
|
||||
withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,credentialsId : "$HARBOR_CREDENTIAL_ID" ,)]) {
|
||||
sh 'echo "$DOCKER_PASSWORD" | docker login $HARBOR_ADDR -u "$DOCKER_USERNAME" --password-stdin'
|
||||
sh 'docker push $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER'
|
||||
sh 'ssh root@192.168.1.5 kubectl set image deploy/$PROJECT_NAME $PROJECT_NAME=$HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER -n $NAMESPACE'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('构建mall4cloud-order镜像') {
|
||||
steps {
|
||||
withEnv(["PROJECT_NAME=mall4cloud-order"]) {
|
||||
sh 'cd ./$PROJECT_NAME && docker build -t $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER .'
|
||||
withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,credentialsId : "$HARBOR_CREDENTIAL_ID" ,)]) {
|
||||
sh 'echo "$DOCKER_PASSWORD" | docker login $HARBOR_ADDR -u "$DOCKER_USERNAME" --password-stdin'
|
||||
sh 'docker push $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER'
|
||||
sh 'ssh root@192.168.1.5 kubectl set image deploy/$PROJECT_NAME $PROJECT_NAME=$HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER -n $NAMESPACE'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('构建mall4cloud-payment镜像') {
|
||||
steps {
|
||||
withEnv(["PROJECT_NAME=mall4cloud-payment"]) {
|
||||
sh 'cd ./$PROJECT_NAME && docker build -t $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER .'
|
||||
withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,credentialsId : "$HARBOR_CREDENTIAL_ID" ,)]) {
|
||||
sh 'echo "$DOCKER_PASSWORD" | docker login $HARBOR_ADDR -u "$DOCKER_USERNAME" --password-stdin'
|
||||
sh 'docker push $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER'
|
||||
sh 'ssh root@192.168.1.5 kubectl set image deploy/$PROJECT_NAME $PROJECT_NAME=$HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER -n $NAMESPACE'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('构建mall4cloud-admin镜像') {
|
||||
steps {
|
||||
withEnv(["PROJECT_NAME=mall4cloud-admin"]) {
|
||||
sh 'cd ./$PROJECT_NAME && docker build -t $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER .'
|
||||
withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,credentialsId : "$HARBOR_CREDENTIAL_ID" ,)]) {
|
||||
sh 'echo "$DOCKER_PASSWORD" | docker login $HARBOR_ADDR -u "$DOCKER_USERNAME" --password-stdin'
|
||||
sh 'docker push $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER'
|
||||
sh 'ssh root@192.168.1.5 kubectl set image deploy/$PROJECT_NAME $PROJECT_NAME=$HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER -n $NAMESPACE'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('构建mall4cloud-product镜像') {
|
||||
steps {
|
||||
withEnv(["PROJECT_NAME=mall4cloud-product"]) {
|
||||
sh 'cd ./$PROJECT_NAME && docker build -t $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER .'
|
||||
withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,credentialsId : "$HARBOR_CREDENTIAL_ID" ,)]) {
|
||||
sh 'echo "$DOCKER_PASSWORD" | docker login $HARBOR_ADDR -u "$DOCKER_USERNAME" --password-stdin'
|
||||
sh 'docker push $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER'
|
||||
sh 'ssh root@192.168.1.5 kubectl set image deploy/$PROJECT_NAME $PROJECT_NAME=$HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER -n $NAMESPACE'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('构建mall4cloud-search镜像') {
|
||||
steps {
|
||||
withEnv(["PROJECT_NAME=mall4cloud-search"]) {
|
||||
sh 'cd ./$PROJECT_NAME && docker build -t $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER .'
|
||||
withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,credentialsId : "$HARBOR_CREDENTIAL_ID" ,)]) {
|
||||
sh 'echo "$DOCKER_PASSWORD" | docker login $HARBOR_ADDR -u "$DOCKER_USERNAME" --password-stdin'
|
||||
sh 'docker push $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER'
|
||||
sh 'ssh root@192.168.1.5 kubectl set image deploy/$PROJECT_NAME $PROJECT_NAME=$HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER -n $NAMESPACE'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('构建mall4cloud-seckill镜像') {
|
||||
steps {
|
||||
withEnv(["PROJECT_NAME=mall4cloud-seckill"]) {
|
||||
sh 'cd ./$PROJECT_NAME && docker build -t $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER .'
|
||||
withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,credentialsId : "$HARBOR_CREDENTIAL_ID" ,)]) {
|
||||
sh 'echo "$DOCKER_PASSWORD" | docker login $HARBOR_ADDR -u "$DOCKER_USERNAME" --password-stdin'
|
||||
sh 'docker push $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER'
|
||||
sh 'ssh root@192.168.1.5 kubectl set image deploy/$PROJECT_NAME $PROJECT_NAME=$HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER -n $NAMESPACE'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('构建mall4cloud-user镜像') {
|
||||
steps {
|
||||
withEnv(["PROJECT_NAME=mall4cloud-user"]) {
|
||||
sh 'cd ./$PROJECT_NAME && docker build -t $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER .'
|
||||
withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,credentialsId : "$HARBOR_CREDENTIAL_ID" ,)]) {
|
||||
sh 'echo "$DOCKER_PASSWORD" | docker login $HARBOR_ADDR -u "$DOCKER_USERNAME" --password-stdin'
|
||||
sh 'docker push $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER'
|
||||
sh 'ssh root@192.168.1.5 kubectl set image deploy/$PROJECT_NAME $PROJECT_NAME=$HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER -n $NAMESPACE'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
pipeline {
|
||||
agent any
|
||||
|
||||
environment {
|
||||
// git账号,不用改
|
||||
GIT_CREDENTIAL_ID = '175776d4-6bbc-4da1-ace2-f2a89453fba4'
|
||||
// git地址
|
||||
GIT_ADDRESS = 'https://git.mall4j.com/mall4cloud/mall4cloud-multishop'
|
||||
// git分支
|
||||
GIT_BRANCH = 'master'
|
||||
|
||||
// harbor账号,不用改
|
||||
HARBOR_CREDENTIAL_ID = 'edd44d2d-f182-40ab-8e72-b4fcae6f793f'
|
||||
// harbor地址
|
||||
HARBOR_ADDR = '192.168.1.11:80'
|
||||
// 名命空间
|
||||
NAMESPACE = 'mall4cloud-release'
|
||||
}
|
||||
stages {
|
||||
stage ('拉取git仓库代码') {
|
||||
steps {
|
||||
checkout([$class: 'GitSCM', branches: [[name: '*/' + "$GIT_BRANCH"]], extensions: [], userRemoteConfigs: [[credentialsId: "$GIT_CREDENTIAL_ID", url: "$GIT_ADDRESS"]]])
|
||||
}
|
||||
}
|
||||
stage ('通过npm构建项目') {
|
||||
steps {
|
||||
sh '''export PATH=/var/jenkins_home/nodejs/bin:$PATH
|
||||
rm -f .env.production
|
||||
tee ./.env.production <<-'EOF'
|
||||
|
||||
// api接口请求地址
|
||||
VITE_APP_BASE_API = 'https://cloud-api.mall4j.com'
|
||||
// 客服webstock接口请求地址 如果是ip的话用 ws,wss对应的是https
|
||||
VITE_APP_WEBSOCKET_URL = 'wss://cloud-api.mall4j.com'
|
||||
VITE_APP_RESOURCES_URL = 'https://mall4j-minio.mall4j.com/mall4cloud'
|
||||
EOF
|
||||
|
||||
sed -i "s#cloud-multishop.mall4j.com#cloud-multishop.mall4j.com#g" nginx.conf
|
||||
npm config set registry https://registry.npmmirror.com
|
||||
pnpm install --no-frozen-lockfile
|
||||
pnpm run build'''
|
||||
}
|
||||
}
|
||||
stage('构建mall4cloud-multishop-vue镜像') {
|
||||
steps {
|
||||
withEnv(["PROJECT_NAME=mall4cloud-multishop-vue"]) {
|
||||
sh 'docker build -t $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER .'
|
||||
withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,credentialsId : "$HARBOR_CREDENTIAL_ID" ,)]) {
|
||||
sh 'echo "$DOCKER_PASSWORD" | docker login $HARBOR_ADDR -u "$DOCKER_USERNAME" --password-stdin'
|
||||
sh 'docker push $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER'
|
||||
sh 'ssh root@192.168.1.5 kubectl set image deploy/$PROJECT_NAME $PROJECT_NAME=$HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER -n $NAMESPACE'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
55
devops指南/jenkinsfile/mall4cloud-pc-release.jenkinsfile
Normal file
@ -0,0 +1,55 @@
|
||||
pipeline {
|
||||
agent any
|
||||
|
||||
environment {
|
||||
// git账号,不用改
|
||||
GIT_CREDENTIAL_ID = '175776d4-6bbc-4da1-ace2-f2a89453fba4'
|
||||
// git地址
|
||||
GIT_ADDRESS = 'https://git.mall4j.com/mall4cloud/mall4cloud-pc'
|
||||
// git分支
|
||||
GIT_BRANCH = 'master'
|
||||
|
||||
// harbor账号,不用改
|
||||
HARBOR_CREDENTIAL_ID = 'edd44d2d-f182-40ab-8e72-b4fcae6f793f'
|
||||
// harbor地址
|
||||
HARBOR_ADDR = '192.168.1.11:80'
|
||||
// 名命空间
|
||||
NAMESPACE = 'mall4cloud-release'
|
||||
}
|
||||
stages {
|
||||
stage ('拉取git仓库代码') {
|
||||
steps {
|
||||
checkout([$class: 'GitSCM', branches: [[name: '*/' + "$GIT_BRANCH"]], extensions: [], userRemoteConfigs: [[credentialsId: "$GIT_CREDENTIAL_ID", url: "$GIT_ADDRESS"]]])
|
||||
}
|
||||
}
|
||||
stage ('通过npm构建项目') {
|
||||
steps {
|
||||
sh '''export PATH=/var/jenkins_home/nodejs/bin:$PATH
|
||||
rm -f .env.production
|
||||
tee ./.env.production <<-'EOF'
|
||||
VITE_APP_RESOURCES_URL = 'https://mall4j-minio.mall4j.com/mall4cloud'
|
||||
VITE_APP_BASE_API = 'https://cloud-api.mall4j.com'
|
||||
VITE_APP_WS_IM_API = 'wss://cloud-api.mall4j.com'
|
||||
VITE_APP_H5_DOMAIN = 'https://h5.mall4j.com/cloud'
|
||||
VITE_APP_MERCHANT_PLATFORM_URL = 'https://cloud-multishop.mall4j.com'
|
||||
VITE_APP_SUPPLIER_PLATFORM_URL = 'https://cloud-supplier.mall4j.com'
|
||||
EOF
|
||||
npm config set registry https://registry.npmmirror.com
|
||||
pnpm install --no-frozen-lockfile
|
||||
pnpm run build'''
|
||||
}
|
||||
}
|
||||
stage('构建mall4cloud-pc镜像') {
|
||||
steps {
|
||||
withEnv(["PROJECT_NAME=mall4cloud-pc"]) {
|
||||
sh 'docker build -t $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER .'
|
||||
withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,credentialsId : "$HARBOR_CREDENTIAL_ID" ,)]) {
|
||||
sh 'echo "$DOCKER_PASSWORD" | docker login $HARBOR_ADDR -u "$DOCKER_USERNAME" --password-stdin'
|
||||
sh 'docker push $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER'
|
||||
sh 'ssh root@192.168.1.5 kubectl set image deploy/$PROJECT_NAME $PROJECT_NAME=$HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER -n $NAMESPACE'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
pipeline {
|
||||
agent any
|
||||
|
||||
environment {
|
||||
// git账号,不用改
|
||||
GIT_CREDENTIAL_ID = '175776d4-6bbc-4da1-ace2-f2a89453fba4'
|
||||
// git地址
|
||||
GIT_ADDRESS = 'https://git.mall4j.com/mall4cloud/mall4cloud-platform'
|
||||
// git分支
|
||||
GIT_BRANCH = 'master'
|
||||
|
||||
// harbor账号,不用改
|
||||
HARBOR_CREDENTIAL_ID = 'edd44d2d-f182-40ab-8e72-b4fcae6f793f'
|
||||
// harbor地址
|
||||
HARBOR_ADDR = '192.168.1.11:80'
|
||||
// 名命空间
|
||||
NAMESPACE = 'mall4cloud-release'
|
||||
}
|
||||
stages {
|
||||
stage ('拉取git仓库代码') {
|
||||
steps {
|
||||
checkout([$class: 'GitSCM', branches: [[name: '*/' + "$GIT_BRANCH"]], extensions: [], userRemoteConfigs: [[credentialsId: "$GIT_CREDENTIAL_ID", url: "$GIT_ADDRESS"]]])
|
||||
}
|
||||
}
|
||||
stage ('通过npm构建项目') {
|
||||
steps {
|
||||
sh '''export PATH=/var/jenkins_home/nodejs/bin:$PATH
|
||||
rm -f .env.production
|
||||
tee ./.env.production <<-'EOF'
|
||||
|
||||
// api接口请求地址
|
||||
VITE_APP_BASE_API = 'https://cloud-api.mall4j.com'
|
||||
// 客服webstock接口请求地址 如果是ip的话用 ws,wss对应的是https
|
||||
VITE_APP_WEBSOCKET_URL = 'wss://cloud-api.mall4j.com'
|
||||
VITE_APP_RESOURCES_URL = 'https://mall4j-minio.mall4j.com/mall4cloud'
|
||||
EOF
|
||||
|
||||
sed -i "s#cloud-platform.mall4j.com#cloud-platform.mall4j.com#g" nginx.conf
|
||||
npm config set registry https://registry.npmmirror.com
|
||||
pnpm install --no-frozen-lockfile
|
||||
pnpm run build'''
|
||||
}
|
||||
}
|
||||
stage('构建mall4cloud-platform-vue镜像') {
|
||||
steps {
|
||||
withEnv(["PROJECT_NAME=mall4cloud-platform-vue"]) {
|
||||
sh 'docker build -t $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER .'
|
||||
withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,credentialsId : "$HARBOR_CREDENTIAL_ID" ,)]) {
|
||||
sh 'echo "$DOCKER_PASSWORD" | docker login $HARBOR_ADDR -u "$DOCKER_USERNAME" --password-stdin'
|
||||
sh 'docker push $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER'
|
||||
sh 'ssh root@192.168.1.5 kubectl set image deploy/$PROJECT_NAME $PROJECT_NAME=$HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER -n $NAMESPACE'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
53
devops指南/jenkinsfile/mall4cloud-station-release.jenkinsfile
Normal file
@ -0,0 +1,53 @@
|
||||
pipeline {
|
||||
agent any
|
||||
|
||||
environment {
|
||||
// git账号,不用改
|
||||
GIT_CREDENTIAL_ID = '175776d4-6bbc-4da1-ace2-f2a89453fba4'
|
||||
// git地址
|
||||
GIT_ADDRESS = 'https://git.mall4j.com/mall4cloud/mall4cloud-station.git'
|
||||
// git分支
|
||||
GIT_BRANCH = 'master'
|
||||
|
||||
// harbor账号,不用改
|
||||
HARBOR_CREDENTIAL_ID = 'edd44d2d-f182-40ab-8e72-b4fcae6f793f'
|
||||
// harbor地址
|
||||
HARBOR_ADDR = '192.168.1.11:80'
|
||||
// 名命空间
|
||||
NAMESPACE = 'mall4cloud-release'
|
||||
}
|
||||
stages {
|
||||
stage ('拉取git仓库代码') {
|
||||
steps {
|
||||
checkout([$class: 'GitSCM', branches: [[name: '*/' + "$GIT_BRANCH"]], extensions: [], userRemoteConfigs: [[credentialsId: "$GIT_CREDENTIAL_ID", url: "$GIT_ADDRESS"]]])
|
||||
}
|
||||
}
|
||||
stage ('通过npm构建项目') {
|
||||
steps {
|
||||
sh '''export PATH=/var/jenkins_home/nodejs/bin:$PATH
|
||||
rm -f .env.production
|
||||
tee ./.env.production <<-'EOF'
|
||||
VITE_APP_MP_APPID = 'wx42bbe857570c5b40'
|
||||
VITE_APP_RESOURCES_URL = 'https://mall4j-minio.mall4j.com/mall4cloud'
|
||||
VITE_APP_BASE_API = 'https://cloud-api.mall4j.com'
|
||||
EOF
|
||||
|
||||
npm config set registry https://registry.npmmirror.com
|
||||
pnpm install --no-frozen-lockfile
|
||||
pnpm run build:h5'''
|
||||
}
|
||||
}
|
||||
stage('构建mall4cloud-station镜像') {
|
||||
steps {
|
||||
withEnv(["PROJECT_NAME=mall4cloud-station"]) {
|
||||
sh 'docker build -t $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER .'
|
||||
withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,credentialsId : "$HARBOR_CREDENTIAL_ID" ,)]) {
|
||||
sh 'echo "$DOCKER_PASSWORD" | docker login $HARBOR_ADDR -u "$DOCKER_USERNAME" --password-stdin'
|
||||
sh 'docker push $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER'
|
||||
sh 'ssh root@192.168.1.5 kubectl set image deploy/$PROJECT_NAME $PROJECT_NAME=$HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER -n $NAMESPACE'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
pipeline {
|
||||
agent any
|
||||
|
||||
environment {
|
||||
// git账号,不用改
|
||||
GIT_CREDENTIAL_ID = '175776d4-6bbc-4da1-ace2-f2a89453fba4'
|
||||
// git地址
|
||||
GIT_ADDRESS = 'https://git.mall4j.com/mall4cloud/mall4cloud-slipper'
|
||||
// git分支
|
||||
GIT_BRANCH = 'master'
|
||||
|
||||
// harbor账号,不用改
|
||||
HARBOR_CREDENTIAL_ID = 'edd44d2d-f182-40ab-8e72-b4fcae6f793f'
|
||||
// harbor地址
|
||||
HARBOR_ADDR = '192.168.1.11:80'
|
||||
// 名命空间
|
||||
NAMESPACE = 'mall4cloud-release'
|
||||
}
|
||||
stages {
|
||||
stage ('拉取git仓库代码') {
|
||||
steps {
|
||||
checkout([$class: 'GitSCM', branches: [[name: '*/' + "$GIT_BRANCH"]], extensions: [], userRemoteConfigs: [[credentialsId: "$GIT_CREDENTIAL_ID", url: "$GIT_ADDRESS"]]])
|
||||
}
|
||||
}
|
||||
stage ('通过npm构建项目') {
|
||||
steps {
|
||||
sh '''export PATH=/var/jenkins_home/nodejs/bin:$PATH
|
||||
rm -f .env.production
|
||||
tee ./.env.production <<-'EOF'
|
||||
// api接口请求地址
|
||||
VITE_APP_BASE_API = 'https://cloud-api.mall4j.com'
|
||||
VITE_APP_RESOURCES_URL = 'https://mall4j-minio.mall4j.com/mall4cloud'
|
||||
EOF
|
||||
|
||||
sed -i "s#cloud-supplier.mall4j.com#cloud-supplier.mall4j.com#g" nginx.conf
|
||||
npm config set registry https://registry.npmmirror.com
|
||||
pnpm install --no-frozen-lockfile
|
||||
pnpm run build'''
|
||||
}
|
||||
}
|
||||
stage('构建mall4cloud-supplier-vue镜像') {
|
||||
steps {
|
||||
withEnv(["PROJECT_NAME=mall4cloud-supplier-vue"]) {
|
||||
sh 'docker build -t $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER .'
|
||||
withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,credentialsId : "$HARBOR_CREDENTIAL_ID" ,)]) {
|
||||
sh 'echo "$DOCKER_PASSWORD" | docker login $HARBOR_ADDR -u "$DOCKER_USERNAME" --password-stdin'
|
||||
sh 'docker push $HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER'
|
||||
sh 'ssh root@192.168.1.5 kubectl set image deploy/$PROJECT_NAME $PROJECT_NAME=$HARBOR_ADDR/$NAMESPACE/$PROJECT_NAME:$BUILD_NUMBER -n $NAMESPACE'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
1903
devops指南/mall4cloud-release.yaml
Normal file
1239
devops指南/mall4j-middleware.yaml
Normal file
BIN
img/app打包/android/AppKey.png
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
img/app打包/android/修改包名、签名.png
Normal file
After Width: | Height: | Size: 106 KiB |
BIN
img/app打包/android/导入工程.png
Normal file
After Width: | Height: | Size: 43 KiB |
BIN
img/app打包/android/导入资源.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
img/app打包/android/导出资源.png
Normal file
After Width: | Height: | Size: 62 KiB |
BIN
img/app打包/android/应用名称.png
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
img/app打包/android/微信支付1.png
Normal file
After Width: | Height: | Size: 76 KiB |
BIN
img/app打包/android/微信支付2.png
Normal file
After Width: | Height: | Size: 226 KiB |
BIN
img/app打包/android/打包apk.png
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
img/app打包/android/检查appid.png
Normal file
After Width: | Height: | Size: 151 KiB |
BIN
img/app打包/ios/xcode配置自动签名.png
Normal file
After Width: | Height: | Size: 145 KiB |
BIN
img/app打包/ios/修改control文件appid.png
Normal file
After Width: | Height: | Size: 244 KiB |
BIN
img/app打包/ios/导入本地打包app资源.png
Normal file
After Width: | Height: | Size: 170 KiB |
BIN
img/app打包/ios/打包上传1.png
Normal file
After Width: | Height: | Size: 112 KiB |
BIN
img/app打包/ios/打包上传2.png
Normal file
After Width: | Height: | Size: 71 KiB |
BIN
img/app打包/ios/打包上传3.png
Normal file
After Width: | Height: | Size: 80 KiB |
BIN
img/app打包/ios/打包上传4.png
Normal file
After Width: | Height: | Size: 103 KiB |
BIN
img/app打包/ios/打包上传5.png
Normal file
After Width: | Height: | Size: 80 KiB |
BIN
img/app打包/ios/打包配置.png
Normal file
After Width: | Height: | Size: 131 KiB |
BIN
img/app打包/ios/生成本地打包app资源.png
Normal file
After Width: | Height: | Size: 239 KiB |
BIN
img/app打包/ios/签名配置.png
Normal file
After Width: | Height: | Size: 109 KiB |
BIN
img/app打包/ios/签名错误1.png
Normal file
After Width: | Height: | Size: 57 KiB |
BIN
img/app打包/ios/签名错误2.png
Normal file
After Width: | Height: | Size: 55 KiB |
BIN
img/app打包/ios/配置appkey.png
Normal file
After Width: | Height: | Size: 176 KiB |
BIN
img/app打包/ios/配置app图标1.png
Normal file
After Width: | Height: | Size: 106 KiB |
BIN
img/app打包/ios/配置app图标2.png
Normal file
After Width: | Height: | Size: 255 KiB |
BIN
img/app打包/ios/配置应用名称.png
Normal file
After Width: | Height: | Size: 116 KiB |
BIN
img/app打包/ios/配置版本信息.png
Normal file
After Width: | Height: | Size: 106 KiB |
BIN
img/中间件安装/SHOW MASTER STATUS.png
Normal file
After Width: | Height: | Size: 33 KiB |
BIN
img/中间件安装/canal mysql配置文件更改.png
Normal file
After Width: | Height: | Size: 53 KiB |
BIN
img/中间件安装/canal数据库监听成功.png
Normal file
After Width: | Height: | Size: 55 KiB |
BIN
img/中间件安装/canal查看mysql配置.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
img/中间件安装/canal的mysql操作过程.png
Normal file
After Width: | Height: | Size: 4.2 KiB |
BIN
img/中间件安装/canal配置-01.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
img/中间件安装/canal配置-02.png
Normal file
After Width: | Height: | Size: 354 KiB |
BIN
img/中间件安装/canal配置-03.png
Normal file
After Width: | Height: | Size: 8.6 KiB |
BIN
img/中间件安装/canal配置-04.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
img/中间件安装/es新建索引-1.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
img/中间件安装/es新建索引-2.png
Normal file
After Width: | Height: | Size: 60 KiB |
BIN
img/中间件安装/es配置-01.png
Normal file
After Width: | Height: | Size: 54 KiB |
BIN
img/中间件安装/es配置-02.png
Normal file
After Width: | Height: | Size: 37 KiB |
BIN
img/中间件安装/minio新建桶.png
Normal file
After Width: | Height: | Size: 7.5 KiB |
BIN
img/中间件安装/minio设置权限-2.png
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
img/中间件安装/minio设置权限.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
img/中间件安装/mysql登录.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
img/中间件安装/nacos官方文档截图.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
img/中间件安装/nacos服务配置.png
Normal file
After Width: | Height: | Size: 50 KiB |
BIN
img/中间件安装/nacos配置列表.png
Normal file
After Width: | Height: | Size: 91 KiB |
BIN
img/中间件安装/rocketmq操作结果.png
Normal file
After Width: | Height: | Size: 36 KiB |
BIN
img/中间件安装/rocketmq操作过程1.png
Normal file
After Width: | Height: | Size: 4.1 KiB |
BIN
img/中间件安装/rocketmq更新broker文件-1.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
img/中间件安装/rocketmq更新broker文件-2.png
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
img/中间件安装/rocketmq更新broker文件-3.png
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
img/中间件安装/rocketmq更新broker文件-4.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
img/中间件安装/seata修改配置-2.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
img/中间件安装/seata修改配置.png
Normal file
After Width: | Height: | Size: 64 KiB |
BIN
img/中间件安装/seata命名空间.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
img/中间件安装/seata安装成功.png
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
img/基本开发文档/nacos_module_gateway.png
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
img/基本开发文档/nacos_module_yml.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
img/基本开发文档/nacos_seata_module.png
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
img/基本开发文档/修改模块_1.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
img/基本开发文档/修改模块_2.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
img/基本开发文档/修改模块_3.png
Normal file
After Width: | Height: | Size: 72 KiB |
BIN
img/基本开发文档/修改模块_4.png
Normal file
After Width: | Height: | Size: 67 KiB |
BIN
img/基本开发文档/修改模块_5.png
Normal file
After Width: | Height: | Size: 45 KiB |
BIN
img/基本开发文档/分库分表/配置-01.jpg
Normal file
After Width: | Height: | Size: 73 KiB |
BIN
img/基本开发文档/分库分表/配置-02.jpg
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
img/基本开发文档/分库分表/配置-03.jpg
Normal file
After Width: | Height: | Size: 134 KiB |
BIN
img/基本开发文档/分库分表/配置-04.jpg
Normal file
After Width: | Height: | Size: 131 KiB |
BIN
img/基本开发文档/分库分表/配置-05.jpg
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
img/基本开发文档/分库分表/配置-06.jpg
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
img/基本开发文档/压测/PTS参数.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
img/基本开发文档/压测/压测.zip
Normal file
BIN
img/基本开发文档/压测/秒杀压测/1/压测数据.png
Normal file
After Width: | Height: | Size: 51 KiB |
BIN
img/基本开发文档/压测/秒杀压测/2/压测数据.png
Normal file
After Width: | Height: | Size: 59 KiB |
BIN
img/基本开发文档/压测/秒杀压测/4/压测数据.png
Normal file
After Width: | Height: | Size: 50 KiB |
BIN
img/基本开发文档/压测/秒杀压测/6/压测数据.png
Normal file
After Width: | Height: | Size: 53 KiB |
BIN
img/基本开发文档/压测/秒杀压测/8-1/压测报告.png
Normal file
After Width: | Height: | Size: 49 KiB |
BIN
img/基本开发文档/压测/秒杀压测/8/压测报告.png
Normal file
After Width: | Height: | Size: 55 KiB |
BIN
img/基本开发文档/压测/秒杀接口配置.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
img/基本开发文档/压测/订单/1/压测报告.png
Normal file
After Width: | Height: | Size: 51 KiB |