- 安装jenkins
- 配置java环境,android sdk环境,flutter环境
- 配置flutter自动打包脚本
安装jenkins
1.下载jenkins安装包
首先下载jenkins安装包,官网下载地址:https://www.jenkins.io/download/ ,如果嫌太慢可以使用镜像下载:
http://mirrors.jenkins-ci.org/
-
解压并安装jenkins
rpm -ivh jenkins-2.174-1.1.noarch.rpm
-
可以使用
image.pngwhereis jenkins
查看jenkins安装位置,看是否安装成功
-
此时就可以启动jenkins服务
image.png
sudo service start jenkins
-
如果没有配置JDK路径之类,可以打开jenkins配置文件进行修改
/etc/init.d/jenkins
-
默认端口是8080,如果需要修改端口,打开
image.png/etc/sysconfig/jenkins
-
此时在浏览器输入
image.pnghttp://localhost:8080
就可以打开jenkins初始的配置页面。接下来就是一系列的初始配置,应该都看得懂。
安装android开发环境
- 下载android command line tools, 解压放到linux服务器。下载地址:https://developer.android.com/studio#downloads
- 使用command line tools里自带的sdkmanager工具来进行相关sdk的下载,具体如下:
cd /usr/local/
unzip commandlinetools-linux-6200805_latest.zip -d /usr/local
mkdir -p /usr/local/sdk
cd /usr/local/cmdline-tools/bin
./sdkmanager --list --sdk_root=/usr/local/sdk #显示可安装包
./sdkmanager --install "platforms;android-29" --sdk_root=/usr/local/sdk #安装android-29
./sdkmanager --install "platform-tools" --sdk_root=/usr/local/sdk #安装platform-tools
./sdkmanager --install "build-tools;29.0.3" --sdk_root=/usr/local/sdk #安装build-tools
./sdkmanager --install "cmdline-tools;latest" --sdk_root=/usr/local/sdk #安装cmdline-tools
当然,你也可以直接去下载android sdk,但目前官方推荐的是这种方式,而且能下载到的android sdk是比较老的版本。
- 设置环境变量
# 打开环境变量配置文件
vim /etc/profile
# 添加如下内容到编辑器中
export ANDROID_HOME=/usr/local/sdk
export FLUTTER_HOME=/usr/local/flutter
export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
export PATH=${FLUTTER_HOME}/bin:${ANDROID_HOME}/build-tools/29.0.3:${ANDROID_HOME}/cmdline-tools/latest/bin:${ANDROID_HOME}/platform-tools:${PATH}
# 保存后执行使立即生效
source /etc/profile
输入adb命令验证是否安装成功
安装Flutter开发环境
- 下载flutter sdk包https://flutter.dev/docs/get-started/install/linux#android-setup
使用git下载到本地:
git clone https://github.com/flutter/flutter.git -b stable # stable可以替换成你想下载的版本号
- 配置环境变量
# 打开环境变量配置文件
vim /etc/profile
# 添加如下内容到编辑器中
export ANDROID_HOME=/usr/local/sdk
export FLUTTER_HOME=/usr/local/flutter
export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
export PATH=${FLUTTER_HOME}/bin:${ANDROID_HOME}/build-tools/29.0.3:${ANDROID_HOME}/cmdline-tools/latest/bin:${ANDROID_HOME}/platform-tools:${PATH}
# 保存后执行使立即生效
source /etc/profile
-
输入flutter doctor验证是否配置成功
image.png
- 第一次安装会让同意google licence,输入
flutter doctor --android-licenses
genkins build脚本配置
-
创建一个jenkins项目
image.png
image.png -
选择git管理仓库,输入git地址和登录授权。注意这里的build分支最好是开辟一个专门的分支作为发布版本,比如preRelease
image.png -
编写编译脚本
image.png
我们可以使用git的提交commit数来作为我们的版本管理数,这样每当有新的commit,执行genkins build就可以产生递增的版本号,可以做到持续发布。
flutter jenkins build script
#!/bin/bash -ilex
export FLUTTER_HOME="/usr/local/flutter/flutter"
export PATH="$FLUTTER_HOME/bin:$PATH"
# get version code and name
time=`date +%Y%m%d`
versionCode=`git rev-list HEAD --count`
versionName=$time.$versionCode
flutter clean
flutter pub get
#run build_runner to generate database
flutter packages pub run build_runner build --delete-conflicting-outputs
#generate i10n using intl_utils
flutter pub global run intl_utils:generate
#build
flutter build apk --debug --build-number=$versionCode --build-name=$versionName
scp build/app/outputs/flutter-apk/app-debug.apk /data/outputs/debug/xmcg.apk #这里也可以直接上传到另外的远程指定空间
# 这里还需要一个新的版本更新操作,具体看自己服务端提供什么样的方式,这里简单操作直接更新内容
echo "versionCode=$versionCode&versionName=$versionName" > /data/outputs/debug/version
#如果是release发布,可以更新tag
tag=$versionName
git tag $tag
git push origin $tag
也附上android jenkins script作参考
export ANDROID_HOME="/data/android/android-sdk"
export PATH="$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$PATH"
# android build.gradle会生成一份version文件
lastVersion=`cat $WORKSPACE/app-lt/version |jq ".versionCode"|sed -e "s/\"//g"`
$ANDROID_HOME/gradle/bin/gradle -v
$ANDROID_HOME/gradle/bin/gradle clean --debug
$ANDROID_HOME/gradle/bin/gradle assembleStage -Denv=stage -Dlastversion=$lastVersion
cp $WORKSPACE/app/build/outputs/apk/app-stage.apk /data/android/app.apk
cp $WORKSPACE/app/version /data/android/
scp $WORKSPACE/app/build/outputs/apk/app-stage.apk /data/android/app.apk
scp $WORKSPACE/app/version /data/android/
tag=`cat $WORKSPACE/app/version |jq ".versionName"|sed -e "s/\"//g"`
git tag $tag
git push origin $tag
网上看到的关于多渠道打包的jenkins build,分享下:
#下载flutter 依赖包
flutter packages get
#flutter 打包
flutter build apk
#分渠道创建目录
rm -rf /data/tgbus_app_android/*
mkdir /data/tgbus_app_android/{_360,anzhi,baidu,gfan,huawei,lenovo,meizu,mumayi,qijian,samsung,sougou,uc,xiaomi,yingyongbao,oppo,vivo}
dir="/data/tgbus_app_android/"
project=`ls /data/tgbus_app_android/`
for i in $project;do
scp -qpr /data/tgbus.jks $dir$i
scp -qpr /data/jenkins/.jenkins/workspace/tgbus_app_android/build/app/outputs/apk/release/app-release.apk $dir$i
cd $dir$i/
#解码apk
apktool d -f app-release.apk
#修改渠道
sed "s/test1/${i}/g" -i app-release/AndroidManifest.xml
#重新打包apk
apktool b app-release -o app-release-$i-dev.apk
#为打包后的apk 进行签名,tgbus.jks 为开发提供的秘钥
echo "32100000" | jarsigner -verbose -keystore tgbus.jks -signedjar app-release-$i.apk app-release-$i-dev.apk tgbus
if [ $? -eq 0 ];then
echo "build is ok"
else
echo "build is false"
fi
done
最后后端说要参照他们的规则调上传APK的功能,无奈又用研究了下curl操作发送
#!/bin/bash -ilex
export FLUTTER_HOME="/usr/local/flutter/flutter"
export PATH="$FLUTTER_HOME/bin:$PATH"
time=`date +%Y%m%d`
versionCode=`git rev-list HEAD --count`
versionName=$time.$versionCode
flutter clean
flutter pub get
flutter build apk --debug --build-number=$versionCode --build-name=$versionName
url=http://x.x.x.x:8050
token=$(curl -s -X POST $url'/api-portal/api/v1/open/oauth/login?userId=admin&password=xxxxxx' -H 'content-type:application/json;charset=utf-8' | jq .body.accessToken)
versionInfo=$(curl -X POST $url'/api-file/api/file/uploadApk' -H "accept: */*" -H "Content-Type: multipart/form-data" -H 'Cookie: accessToken='$token -F "file=@build/app/outputs/flutter-apk/app-debug.apk;type=application/vnd.android.package-archive" | jq .body)
# { "versionCode": "1", "versionName": "1.0.0", "package": "com.example.FlutterDemo", "filePath": "group1/M00/01/EB/rBDLUWFWbM6APGW0AlYUPQvotY0691.apk", "fileName": "app-debug", "apkSize": 39195709, "md5": "fcc2b4fea5ea04a0581b7d8922b5b894", "httpUrl": "http://x.x.x.x:8013/group1/M00/01/EB/rBDLUWFWbM6APGW0AlYUPQvotY0691.apk" }
apkName=`echo $versionInfo|jq .fileName`
filePath=`echo $versionInfo|jq .filePath`
httpUrl=`echo $versionInfo|jq .httpUrl`
versionCode=`echo $versionInfo|jq .versionCode`
md5=`echo $versionInfo|jq .md5`
apkSize=`echo $versionInfo|jq .apkSize`
curl -s -X POST $url'/api-digital/api/v1/version/save' -H 'Content-Type: application/json' -H 'Cookie: accessToken='$token -d '{"apkSize":'$apkSize',"apkName":'$apkName',"apkTypeCode":"xm_app","isCompel":"1","updateContent":"debug","affixes":{"fileName":'$apkName',"filePath":'$filePath',"httpUrl":'$httpUrl'},"versionCode":'$versionCode',"versionName":'$apkName',"md5":'$md5'}'
#tag=$versionName
#git tag $tag
#git push origin $tag
jenkins提权
jenkins脚本运行过程中经常会提醒各种权限的问题,为了简单绕过这些检测,可以对jenkins用户进行提权。
首先可以查看jenkins的用户权限:
cat /etc/passwd |grep jenkins
把jenkins用户加入到root权限组
gpasswd -a root jenkins
修改jenkins配置文件,进入到/etc/sysconfig/jenkins
JENKINS_USER="root"
JENKINS_GROUP="root"
重新启动jenkins
service jenkins restart
jenkins配置gitee
- 安装gitee插件
进入manage jenkins
-manage plugins
,搜索gitee
,安装 - 配置全局git 凭证数据
进入manage jenkins- configure system-
找到gitee configure
image.png
image.png -
进入项目配置,配置触发器
勾选build when a change is pushed ot Gitee
记住勾选的webhook url及生成的webhook token
image.png
image.png -
在gitee空间配置webhook
image.png
image.png
这里填入刚刚记住的url和token
image.png
作者:0x01
链接:https://www.jianshu.com/p/6918def344b8
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 标签:app,Flutter,apk,build,linux,jenkins,android,flutter From: https://www.cnblogs.com/zgq123456/p/17465245.html