Jenkins 配置
Jenkins是基于Java开发的一种持续集成工具。所以呢,要使用Jenkins必须使用先安装JDK。
JDK安装:Java Development Kit
Jenkins安装测试Jenkins安装成功 会自动打开浏览器注意: 1、Jenkins 安装成功后,会创建一个Jenkins用户,而Jenkins的工作区间默认是在【/用户/共享/Jenkins/Home/jobs】目录下,可以用Finder-->前往,进入。2、Jenkins目录下的文件夹的读写权限只对Jenkins用户开放,所以后面apple证书等必须在Jenkins用户下安装,项目的ipa导出也得在Jenkins用户下操作。(或者用管理员权限修改该目录针对用户的权限)3、Jenkins的使用是每一个用户都可以使用,所以有可能导致构建版本的时候报错,还是老老实实在Jenkins用户下操作吧。
如果出现下面情况,则JDK有问题重新安装
下图表明安装成功打开浏览器,输入http://localhost:8080,如果能够正常打开Jenkins,则Jenkins安装成功。设置Jenkins用户2.1 进入 系统偏好设置->用户与群组2.2 点击左下角的解锁,输入当前用户的密码2.3 此时Jenkins用户还是一个空的无名用户,可以在用户列表中选择Jenkins用户,右击并选择“高级选项”,输入全名并确定。
2.4 **点击“更改密码”重设Jenkins用户的密码。为了后期方便,可勾选“运行用户管理这台电脑”,将Jenkins用户设为管理员。 **2.5 选择用户列表下方的登录选项,将自动登录用户设为Jenkins。
3.初始化Jenkins重启以后,自动以Jenkins登录了。找到/Users/Shared/Jenkins/Home/ 这个目录下,打开initialAdminPassword文件,复制出密码,就可以填到网页上去重置密码了。
Unlock JenkinsCustomize JenkinsCreast First Admin User常用插件Keychains and Provisioning Profiles ManagementPost-Build Script Plug-inSSH Slaves pluginSubversion Tagging PluginGitLab PluginExtended Choice Parameter Plug-In
配置项目Snip20170111_6.pngSnip20170112_8.png配置代码echo "准备开始打ipa包...................." #项目名称project_name="HeiPiaoFishingBusiness"#工程环境路径 workspace_path="/Users/Shared/Jenkins/Home/workspace/IOS-B"#build的路径build_path="$workspace_path/$project_name"#证书CODE_SIGN_IDENTITY="iPhone Distribution: Shenzhen Heipiao Technology Co., Ltd. (456PY4GRQJ)"#描述文件PROVISIONING_PROFILE_APPSTORE="eea7f8c4-08c8-459d-ae9d-9ca66a5e529b"PROVISIONING_PROFILE_AD_Hoc="fc6bf319-0114-4c0b-8d1c-e9f90419ffe9"#蒲公英USER_KEYUSER_KEY="7b19054ef2a2aa2678cddbd33d1b10d5"#蒲公英API_KEYAPI_KEY="cafcda0bf7a09201f1d39cb2965a2c6f"svn upgrade#解决冲突文件svn resolve --accept theirs-full "${build_path}/${project_name}/Dev_info.plist"# info.plist路径project_infoplist_path="$build_path/$project_name/Info.plist"#取版本号bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}")#取build值bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${project_infoplist_path}")DATE="$(date +%y-%m-%d-%H-%M-%S)"#IPA名appName_appStore="${project_name}_V${bundleShortVersion}_${DATE}_appStore"appName_productNetTest="${project_name}_V${bundleShortVersion}_${DATE}_productNetTest"appName_outNetTest="${project_name}_V${bundleShortVersion}_${DATE}_outNetTest"appName_inNetTest="${project_name}_V${bundleShortVersion}_${DATE}_inNetTest"#.app生成后的路径app_path=$build_path/build/Build/Products/Release-iphoneos/${project_name}.appapp_Dev_path=$build_path/build/Build/Products/Release-iphoneos/${project_name}_Dev.app#添加解锁security unlock-keychain -p "0" "/Users/Shared/Jenkins/Library/Keychains/login.keychain-db"cd $workspace_pathlog=$(svn log |head -n 5) # >不追加输出 >>追加输出echo $log > log.txtmkdir -p APPS#IPA生成后的路径ipa_appStore_path=$workspace_path/APPS/${appName_appStore}.ipaipa_productNetTest_path=$workspace_path/APPS/${appName_productNetTest}.ipaipa_outNetTest_path=$workspace_path/APPS/${appName_outNetTest}.ipaipa_inNetTest_path=$workspace_path/APPS/${appName_inNetTest}.ipaecho "第一步,进入项目工程文件: $build_path"cd $build_pathecho "第二步,执行build clean命令"xcodebuild clean#参数构建#内网测试if [ $para="innet" ]; then echo "第三步,执行编译生成.app命令"xcodebuild -workspace $project_name.xcworkspace -scheme "${project_name}_Dev" -sdk iphoneos GCC_PREPROCESSOR_DEFINITIONS="DEVELOPMENT=1 API_TYPE=0" PROVISIONING_PROFILE="$PROVISIONING_PROFILE_AD_Hoc" CODE_SIGN_IDENTITY="$CODE_SIGN_IDENTITY" IPHONEOS_DEPLOYMENT_TARGET="8.0" -configuration Release -derivedDataPath buildecho "第四步, 导出ipa包"xcrun -sdk iphoneos PackageApplication -v ${app_Dev_path} -o ${ipa_inNetTest_path}echo "制作 outNetTest ipa 包完成......................."#路径写入文件#echo "${ipa_inNetTest_path}" > $workspace_path/path.txtcd /Users/Shared/Jenkins/Home/workspace./upload.sh ${ipa_inNetTest_path} ${log}#外网测试elif [ $para="outnet" ]; then echo "第三步,执行编译生成.app命令"xcodebuild -workspace $project_name.xcworkspace -scheme "${project_name}_Dev" -sdk iphoneos GCC_PREPROCESSOR_DEFINITIONS="DEVELOPMENT=1 API_TYPE=1" PROVISIONING_PROFILE="$PROVISIONING_PROFILE_AD_Hoc" CODE_SIGN_IDENTITY="$CODE_SIGN_IDENTITY" IPHONEOS_DEPLOYMENT_TARGET="8.0" -configuration Release -derivedDataPath build#echo "第四步, 导出ipa包"xcrun -sdk iphoneos PackageApplication -v ${app_Dev_path} -o ${ipa_outNetTest_path}echo "制作 outNetTest ipa 包完成......................."#上传外网测试包到蒲公英echo '++++++++++++++upload+++++++++++++'#路径写入文件#echo "${ipa_outNetTest_path}" > $workspace_path/path.txtcd /Users/Shared/Jenkins/Home/workspace./upload.sh ${ipa_outNetTest_path} ${log}else#生成APPSTORE包echo "第三步,执行编译生成.app命令"xcodebuild -workspace $project_name.xcworkspace -scheme $project_name -sdk iphoneos GCC_PREPROCESSOR_DEFINITIONS="DEVELOPMENT=0 API_TYPE=2" PROVISIONING_PROFILE="$PROVISIONING_PROFILE_APPSTORE" CODE_SIGN_IDENTITY="$CODE_SIGN_IDENTITY" IPHONEOS_DEPLOYMENT_TARGET="8.0" -configuration Release -derivedDataPath buildecho "第四步, 导出ipa包"xcrun -sdk iphoneos PackageApplication -v $app_path -o $ipa_appStore_pathecho "制作appStore ipa包完成......................."#生产环境测试echo "第二步,执行build clean命令"xcodebuild cleanecho "第三步,执行编译生成.app命令"xcodebuild -workspace $project_name.xcworkspace -scheme ${project_name} -sdk iphoneos GCC_PREPROCESSOR_DEFINITIONS="DEVELOPMENT=0 API_TYPE=2" PROVISIONING_PROFILE="$PROVISIONING_PROFILE_AD_Hoc" CODE_SIGN_IDENTITY="$CODE_SIGN_IDENTITY" IPHONEOS_DEPLOYMENT_TARGET="8.0" -configuration Release -derivedDataPath buildecho "第四步, 导出ipa包"xcrun -sdk iphoneos PackageApplication -v ${app_path} -o ${ipa_productNetTest_path}echo "制作 productNetTest ipa 包完成......................."#路径写入文件#echo "${ipa_productNetTest_path}" > $workspace_path/path.txtcd /Users/Shared/Jenkins/Home/workspace./upload.sh ${ipa_productNetTest_path} ${log}if [ $tag="true" ]; then #tagecho "打tag V${bundleShortVersion}_${DATE}"svn cp -m "打tag V${bundleShortVersion}_${DATE}" https://192.168.1.201/svn/heipiao/app/ios/B/trunk/${project_name} https://192.168.1.201/svn/heipiao/app/ios/B/tags/V${bundleShortVersion}_${DATE}fifi
upload.sh
代码#!/bin/shecho '==============='echo $*while result=$(curl --retry 10 -F "file=@$1" -F "uKey=7b19054ef2a2aa2678cddbd33d1b10d5" -F "_api_key=cafcda0bf7a09201f1d39cb2965a2c6f" -F "updateDescription=$2" "https://qiniu-storage.pgyer.com/apiv1/app/upload")echo ${result}do if [[ $result=='' ]]; then echo "upload fail" else echo "upload success" break fidone
没有Scheme,导致无法打包命令行调用code sign时报错security unlock-keychain -p "你的用户密码" ~/Library/Keychains/login.keychain
Mac下Jenkins+SVN+Xcode构建持续导出环境Mac下Jenkins+SVN(Git)+Xcode搭建持续构建环境手把手教你利用Jenkins持续集成iOS项目基于xcodebuild和xcrun的自动化打包
xcodebuild -sdk xxx -target xxx GCC_PREPROCESSOR_DEFINITIONS="API_TYPE=0"
API_TYPE=0 ,后面只能为数字 在下图配置Snip20170111_1.png基本配置参数化构建测试脚本Jenkins地址xcodebuild路径设置编码svn方式构建构建出发机制安卓配置QQ20170114-0.pngQQ20170114-1.png安卓shell脚本#start#项目名称PROJECT_NAME="Android_B"#工程环境路径WORKSPACE_PATH="${JENKINS_HOME}/jobs/${PROJECT_NAME}/workspace"#蒲公英USER_KEYUSER_KEY="7b19054ef2a2aa2678cddbd33d1b10d5"#蒲公英API_KEYAPI_KEY="cafcda0bf7a09201f1d39cb2965a2c6f"# gradle.properties路径VERSION_CODE_PATH="${WORKSPACE_PATH}/gradle.properties"#取版本号VERSION_CODE=`cat ${VERSION_CODE_PATH} | sed -n 's/.*VERSION_NAME=\(\S\)/\1/p' | tr -d '\r'`echo ${VERSION_CODE}#时间DATE="$(date +%Y-%m-%d)"#svn路径SVN_TAG_PATH="https://192.168.1.201/svn/heipiao/app/andriod/B/tags"#trunk_pathTRUNK_PATH="https://192.168.1.201/svn/heipiao/app/andriod/B/trunk"SVN_USER="maimingliang"SVN_PWD="maimingliang"#tagNameTAG_NAME="v${VERSION_CODE}-${DATE}"echo ${TAG_NAME} if [ ${BUILD_TYPE}='ProductionRelease' ]&&[ ${IS_CREATE_TAG}='true' ]; thenecho "创建tag目录"svn mkdir ${SVN_TAG_PATH}/${TAG_NAME} -m "mkdir tags ${TAG_NAME}" --username "$SVN_USER" --password "$SVN_PWD" --non-interactiveecho "打tag"svn cp $TRUNK_PATH $SVN_TAG_PATH/${TAG_NAME} -m "tag version ${TAG_NAME}-${DATE}" --username "$SVN_USER" --password "$SVN_PWD" --non-interactiveelseecho '不符合打tag的条件'fi #日志LOG_STR=$(svn log --limit 1 --username=$SVN_USER --password=$SVN_PWD ${WORKSPACE_PATH})echo ${LOG_STR}#判断是否需要上传蒲公英if [ ${BUILD_TYPE}='BetaOutdebug' ]; thencurl --retry 10 -F "file=@${WORKSPACE_PATH}/app/build/outputs/apk/hp-b-v${VERSION_CODE}-beta-${DATE}-outdebug.apk" -F "uKey=${USER_KEY}" -F "_api_key=${API_KEY}" https://qiniu-storage.pgyer.com/apiv1/app/uploadelseecho ${BUILD_TYPE}fi#判断是否需要打tag#end
xcodebuild批量打包之区分不同的渠道
前言:
Jenkins 是一款开源的 CI&CD 软件,用于自动化各种开发任务,包括构建、测试和部署软件等。支持docker、windows、linux 系统,下面让我们用一张图了解一下:
Jenkins就像是你刚买的一部手机,手机本身没有太多的APP,需要你自己根据需求去下载安装你想要的应用软件。有些人的生产环境是JAVA、PHP、Python、C#等,所在的jenkins的配置有所不同,但原理都是一样。下面我们着重讲解C#环境下的配置及使用方法。
参考来源:
https://www.jenkins.io/zh/doc/
https://www.w3cschool.cn/jenkins/
1、 准备工作
1. java sdk 1.8版本
2. 下载 Jenkins
3. 部署服务器需要安装netcore sdk2.1以上、git工具。安装这2个软件
1.1安装方法
安装Jenkins windows软件包,
安装后打开页面如下:
默认密码的位置:用浏览器打开即可
C:\Windows\system32\config\systemprofile\AppData\Local\Jenkins\.jenkins\secrets\initialAdminPassword
打开后将密码复制到上面中点击继续,选择第一个安装推荐的插件:
安装所有推荐的插件
安装后创建一个管理员用户,
配置 jenkins URL:这里可以是默认的localhost:8080
1.2 admin密码更改忘记情况
如果权限丢失,请删除这里面所有的文件,重新安装
C:\Windows\System32\config\systemprofile\AppData\Local\Jenkins\(这里是默认安装后的jenkins的工作路径,后面内容讲解如何修改默认路径)
获取请自行百度去查找 修改config.xml
C:\Windows\System32\config\systemprofile\AppData\Local\Jenkins\.jenkins\ config.xml
第一次安装成功后,建议把admin的相关配置都备份一遍,防止后面修改权限时admin权限丢失(下面的路径全部备份)
C:\Windows\System32\config\systemprofile\AppData\Local\Jenkins\
1、删除Jenkins目录下config.xml文件中下面代码,并保存文件。
<useSecurity>true</useSecurity>
<authorizationStrategy class="hudson.security.FullControlOnceLoggedInAuthorizationStrategy">
<denyAnonymousReadAccess>true</denyAnonymousReadAccess>
</authorizationStrategy>
<securityRealm class="hudson.security.HudsonPrivateSecurityRealm">
<disableSignup>true</disableSignup>
<enableCaptcha>false</enableCaptcha>
</securityRealm>
<useSecurity>true</useSecurity>
<authorizationStrategy class="hudson.security.FullControlOnceLoggedInAuthorizationStrategy">
<denyAnonymousReadAccess>true</denyAnonymousReadAccess>
</authorizationStrategy>
<securityRealm class="hudson.security.HudsonPrivateSecurityRealm">
<disableSignup>true</disableSignup>
<enableCaptcha>false</enableCaptcha>
</securityRealm>
1.3修改默认的工作空间
· 添加环境变量
· 前往默认安装的jenkins目录中把需要保留的配置内容复制出来C:\Windows\System32\config\systemprofile\AppData\Local\Jenkins.jenkin如果找不到 一般在这里C:\Windows\SysWOW64\config\systemprofile\AppData\Local\Jenkins.jenkin
· 如果是直接安装的jenkins需要到安装目录修改配置比如D:\Program Files\Jenkins\Jenkins.xml
修改成这样
最后把刚刚从这个路径(
C:\Windows\System32\config\systemprofile\AppData\Local\Jenkins.jenkin)备份下来的文件拷贝到新建的路径中去(下面圈出来的路径):
打开windows服务,搜索jenkins,右击重启服务。
1.4环境变量
nuget相关环境变量配置 这一步可以忽略不一定需要
增加环境变量
然后在job中设置环境变量
继续配置全局环境变量,并应用到msbulid的参数中去
1.5下载.NET sdk
https://download.visualstudio.microsoft.com/download/pr/674a9f7d-862e-4f92-91b6-f1cf3fed03ce/e07db4de77ada8da2c23261dfe9db138/dotnet-sdk-5.0.103-win-x64.exe
这里需要下载NET 2.1SDK以上的版本 我这里推荐直接安装.Net 5.0 sdk.
可以先用cmd 命令 查看自己是否已经安装好:dotnet sdk –version
为什么这里要安装这个sdk,因为后面的execute shell 需要执行dotnet 的相关命令,相关文档是:https://docs.microsoft.com/zh-cn/dotnet/core/tools/dotnet
1.6安装git 工具
为什么要安装git工具?因为下文中对job的配置环节中有一个execute shell 需要执行dotnet 相关命令,有人会问为什么dotnet 的相关命令不能用power shell 进行编译和发布,目前尝试过,无法编译通过,这条路行不通,只能使用execute shell 进行执行命令。(这里解释一下为什么要安装git才能去在windows中执行execute shell,因为execute shell是linux才能执行的,windows默认不支持,git中自带这个功能,因此要安装git)
下面是安装git的相关截图:
首先打开GitExtensions-2.48.03-SetupComplete.msi 安装这个软件
下一步
下一步
下一步
下一步
下一步
下一步直接安装,随后有弹窗,点击OK
下一步
下面是核心的git安装,继续…
2. 安装必要插件
进入后台后需要自己安装插件
2.1这里整理所有需要提前安装的插件
SSH、Publish Over SSH、build environment、MSBuild Plugin、 Role-based Authorization Strategy、 Gitlab(不需要用的可以不安装)、 PowerShell plugin、Environment Injector Plugin、 Nuget Plugin、 Workspace Cleanup Plugin、Branch API Plugin、workspace cleanup、NodeJS、Simple Theme/ material-theme
我这里需要安装gitlab相关插件(因为我要从gitlab中获取代码,不需要的朋友可忽略安装),那么下面将搜索到的相关的gitlab插件全部选中安装。
2.2安装SSH、Publish Over SSH、PowerShell插件(最重要)
2.3安装MSBuild Plugin插件 这步可以省略
打开 Jenkins 系统管理,找到管理插件选项,点击进入,切换到可选插件选项卡在搜索框输入 MSBuild 搜索。在搜索结果中找到 MSBuild 插件并安装。
配置 MSBuild
打开 Jenkins 系统管理,找到 Global Tool Configuration 选项,点击进入。找到 MSBuild 并配置如下
Msbuild 路径 备份下来,后面job配置需要用到:
D:\Program Files\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\MSBuild.exe
MSBuild 的一般路径是自己安装vs软件的路径(我安装的是vs2019,上面的Msbuild 路径已经介绍)。
将自己的路径填入即可。
2.4安装Role插件,并配置相关权限
配置 jenkins 权限管理:基于角色的权限管理,先创建角色和用户,给角色授权,然后把用户管理到角色。
更改认证方式:
Jenkins —> 系统管理 —> 全局安全配置
默认创建的用户登录后可以做任何操作,取决于默认的认证授权方式。
创建新用户:
Jenkins ---> 系统管理 ---> 管理用户:
创建角色:
Jenkins —> 系统管理 -> Manage and Assign Roles
添加角色:
对角色分配权限:
将用户关联到角色:
测试普通用户登录: (建议先不要退出jenkinsadmin账号,换个浏览器登陆)
登录成功之的界面,没有系统管理权限,只能执行被授权过的 job 且没有了管理员权限。
配置 jenkins 管理员邮箱:
Jenkins —> 系统管理 —> 系统设置
测试发送邮件
如果代码仓库是GIT,那么请提前安装和git相关工具,我这里用的是Git Extensions,安装后自己百度去生成ssh的公钥和私钥,网上很多。
生成后到目录C:\Users\Administrator\.ssh 中找到id_rsa 复制出私钥
配置 jenkins 自动拉取代码:
jenkins 服务器添加证书:
Jenkins -> 凭据 -> jenkins —> 全局凭据 —> 添加凭据
以上步骤如果验证失败可以直接添加gitlab账户和相关ssh秘钥即可。
3.5安装build environment
3.6安装Environment Injector
3.7 安装workspace cleanup插件
3.8安装Simple Theme / material-theme更换主题
参考:http://afonsof.com/jenkins-material-theme/ 可以在线生成主题
https://blog.csdn.net/DynastyRumble/article/details/103910441 要用这个
https://www.pianshen.com/article/51701037320/ material-theme更换主题
http://localhost:8080/userContent/layout/jenkins-material-theme.csshttp://localhost:8080/userContent/layout/title.css
3.配置job项目(c# 后端)
3.1新建项目
点击新建item
输入项目名称、选择模式。
3.2配置源代码的来源
这里我选择的是git,对于下面的RUL和全局凭证,请参考2.4全局凭证设置,如果看不懂,我这里再截图提供说明:
选择 strores scoped to Jenkins
选择全局凭证
选择添加凭证
3.3构建环境配置
其中构建环境可能需要用到nuget,我提前在环境变量中添加了
至于为什么要加这里面涉及的内容太复杂,这里简单描述一下:
每个研发人员的账户下都会产生一个默认的nuget包目录,每个人员的路径不一致,那么到服务器上通过jenkins来编译代码的时候需要一个统一的nuget包路径,因此这里做了一个全局的配置路径。
那么这里需要添加相关环境变量
3.4构建
3.4.1先添加一个execute shell
dotnet restore
dotnet clean
dotnet build
dotnet publish -o publish
3.4.2再添加一个powershell
#Step1: 設定來源目錄
$SourceFolder="D:\JenkinsWorkSpace\Jenkins\.jenkins\workspace\MicNetCore\publish"
#Step2: 設定覆蓋到IIS WebSite的目錄上
$DestinationFolder="D:\Project\NewNetCoreNfine\publish"
#Step3:設定需要排除的文件(作废 不能排除文件夹,只能排除文件)
#$ExcludeItems=@("appsettings.json","web.config","\wwwroot\","\logs\")
#这个可以排除文件夹和文件
$ExcludeItems="D:\JenkinsWorkSpace\Jenkins\.jenkins\workspace\exclude\exclude_NewNetCoreNfine\exclude.txt"
#Step4:設定备份压缩的文件路径
$CurrentTime=Get-Date -Format 'yyyyMMddHHmmsssss'
$ZipFolder="D:\Project\NewNetCoreNfine\"+$CurrentTime+".zip"
#Step5:停止IIS程序池和站点
C:\Windows\System32\inetsrv\appcmd.exe stop apppool /apppool.name:"NewNetCoreNfine"
C:\Windows\System32\inetsrv\appcmd.exe stop site /site.name:"NewNetCoreNfine"
Write-Host 'IIS应用程序池停止准备复制代码...'
#Step6: 压缩原项目文件,以时间格式打包
#将文件或文件夹test压缩为test.zip
Compress-Archive -Path $DestinationFolder -DestinationPath $ZipFolder
#将文件test.zip解压到test目录下 这个暂时不需要
#Expand-Archive -Path E:\test.zip -DestinationPath F:\test
#Step7: 執行資料夾覆蓋 【-Recurse】包含子資料夾底下的內容 【-force】強制覆蓋
#Copy-Item -Path $SourceFolder -Recurse -Destination $DestinationFolder -Exclude $ExcludeItems -force
#xcopy "D:\JenkinsWorkSpace\Jenkins\.jenkins\workspace\MicNetCore\publish" "D:\Project\NewNetCoreNfine\publish" /s/e/y/exclude:D:\JenkinsWorkSpace\Jenkins\.jenkins\workspace\exclude\exclude_NewNetCoreNfine\exclude.txt
xcopy $SourceFolder $DestinationFolder /s/e/y/exclude:$ExcludeItems
Write-Host '代码已覆盖...'
#Step8: 启动IIS程序池和站点
C:\Windows\System32\inetsrv\appcmd.exe start apppool /apppool.name:"NewNetCoreNfine"
C:\Windows\System32\inetsrv\appcmd.exe start site /site.name:"NewNetCoreNfine"
最后要勾选这个
3.4.3使用方法(构建项目)
点击正在构建的项目,如下图:
点击控制台查看编辑结果
3.5对job增加权限
https://blog.csdn.net/xuhailiang0816/article/details/80307523
系统设置 >> Manage and Assign Roles
下面要对job加权限
3.6构建后操作
添加成功后
这里面的高级选项内容默认即可
我这里勾选了无论什么情况都清除工作空间,给服务器腾空间。
4.配置job项目(前端)
https://blog.csdn.net/zhenghongcs/article/details/103708108
http://www.mamicode.com/info-detail-3032198.html
执行shell命令
#列出当前的npm,node版本(只起个提示作用)
npm -v
node -v
#安装node-sass
SASS_BINARY_SITE=https://npm.taobao.ort/mirrors/node-saas/ npm install node-sass
#执行项目中的npm 安装完成后打包。
npm config set registry https://registry.npm.taobao.org
npm install
npm run build
发表评论