首页 > 系统相关 >linux环境下jenkins搭建过程+Flutter打包集成

linux环境下jenkins搭建过程+Flutter打包集成

时间:2023-06-08 09:34:12浏览次数:62  
标签:app Flutter apk build linux jenkins android flutter

  1. 安装jenkins
  2. 配置java环境,android sdk环境,flutter环境
  3. 配置flutter自动打包脚本
安装jenkins

1.下载jenkins安装包
首先下载jenkins安装包,官网下载地址:https://www.jenkins.io/download/ ,如果嫌太慢可以使用镜像下载:
http://mirrors.jenkins-ci.org/

  1. 解压并安装jenkins
    rpm -ivh jenkins-2.174-1.1.noarch.rpm

  2. 可以使用whereis jenkins查看jenkins安装位置,看是否安装成功

      image.png

     

  3. 此时就可以启动jenkins服务
    sudo service start jenkins

      image.png

     

  4. 如果没有配置JDK路径之类,可以打开jenkins配置文件进行修改 /etc/init.d/jenkins

  5. 默认端口是8080,如果需要修改端口,打开/etc/sysconfig/jenkins

      image.png

     

  6. 此时在浏览器输入http://localhost:8080就可以打开jenkins初始的配置页面。接下来就是一系列的初始配置,应该都看得懂。

      image.png

     

安装android开发环境
  1. 下载android command line tools, 解压放到linux服务器。下载地址:https://developer.android.com/studio#downloads
  2. 使用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是比较老的版本。

  1. 设置环境变量
# 打开环境变量配置文件
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开发环境
  1. 下载flutter sdk包https://flutter.dev/docs/get-started/install/linux#android-setup
    使用git下载到本地:
git clone https://github.com/flutter/flutter.git -b stable   # stable可以替换成你想下载的版本号
  1. 配置环境变量
# 打开环境变量配置文件
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
  1. 输入flutter doctor验证是否配置成功


      image.png
  1. 第一次安装会让同意google licence,输入
flutter doctor --android-licenses
genkins build脚本配置
  1. 创建一个jenkins项目


      image.png
      image.png
  2. 选择git管理仓库,输入git地址和登录授权。注意这里的build分支最好是开辟一个专门的分支作为发布版本,比如preRelease


      image.png
  3. 编写编译脚本


      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

相关文章

  • 一分钟学一个 Linux 命令 - mv 和 cp
    前言大家好,我是god23bin。欢迎来到《一分钟学一个Linux命令》系列,今天需要你花两分钟时间来学习下,因为今天要讲的是两个命令,mv和cp命令。mv什么是mv命令?mv是英文单词move的缩写,顾名思义,可以用来移动东西,那么移动什么呢?答案就是可以移动文件或目录,将其从一个位置移到......
  • 2023.6.7 Linux系统日志管理
    01Linux系统⽇志管理系统⽇志架构概述syslog⽇志审查Journal⽇志审查Journal⽇志持久化⽇志轮询logrotate系统⽇志架构概述在rhel7系统中有两个⽇志服务,分别是传统的rsyslog和新添加的systemd-journalsystemd-journald是⼀个改进型的⽇志管理服务,可以收集来⾃内核......
  • MX Linux 23现在可以进行基于Debian 12 “Bookworm “的测试
    MX Linux开发者今天宣布,即将发布的MXLinux23“Libretto“的测试版可供公众测试。基于即将推出的Debian12“Bookworm“操作系统系列,MXLinux23采用了长期支持的Linux6.1LTS内核系列,使用sysVinit作为默认的初始系统,而不是系统,并有三个版本的Xfce4.18、KDEPlasma......
  • MX Linux 23现在可以进行基于Debian 12 “Bookworm “的测试
    MX Linux开发者今天宣布,即将发布的MXLinux23“Libretto“的测试版可供公众测试。基于即将推出的Debian12“Bookworm“操作系统系列,MXLinux23采用了长期支持的Linux6.1LTS内核系列,使用sysVinit作为默认的初始系统,而不是系统,并有三个版本的Xfce4.18、KDEPlasma......
  • MX Linux 23现在可以进行基于Debian 12 “Bookworm “的测试
    MX Linux开发者今天宣布,即将发布的MXLinux23“Libretto“的测试版可供公众测试。基于即将推出的Debian12“Bookworm“操作系统系列,MXLinux23采用了长期支持的Linux6.1LTS内核系列,使用sysVinit作为默认的初始系统,而不是系统,并有三个版本的Xfce4.18、KDEPlasma......
  • 2023.6.701.Linux系统计划任务
    01.Linux系统计划任务1.Crond计划任务概述2.crond配置⽂件详解3.crond计划任务管理4.crond配置编写实例5.crond计划任务调试Atuor:Wingvx:WingspanGo1.Crond计划任务概述什么是计划任务,计划任务类似于我们平时⽣活中的闹钟。在Linux系统的计划任务服务crond可以满......
  • Linux发行版本的应用方向有哪些
      Linux发行版本可以根据用途以及面向的用户群不同可以组略分为服务器和台式机,面向个人和企业。    ArchLinux发行版本在安装时要求用户有一定的Linux基础,这款发行版本不适合新手入门,不过作为服务器,确是很好的选择。Debian以及衍生的发行版本适合初学者入门学习,它采用GN......
  • 3_Installing Linux, Apache, MySQL, PHP (LAMP) Stack on Ubuntu 20.04
      地址:https://www.codewithharry.com/blogpost/lamp-stack-ubuntu-20-04/ InstallingLAMPstackonUbuntu20.04in5MinutesThispostwillexplainhowtoinstallLAMPstackonUbuntu20.04.LAMPstackconsistsofthefollowingcomponents:Linux-AnyLi......
  • linux 脚本 if [ $? -ne 0 ];then
    在shell命令中,if[$?-ne0];then是一个条件语句,用于检查上一个命令的执行状态。$?是一个特殊变量,它包含了上一个命令的退出状态码。-ne是不等于的意思。退出状态码为0表示命令执行成功,非0表示命令执行失败或出现错误。因此,if[$?-ne0];then的意思是:如果上一个......
  • linux内核编程语言环境
    3.1as86汇编器在Linux0.1x系统中使用了两种汇编器(Assembler)。一种是能产生16位代码的as86汇编器,使用配套的ld86链接器;另一种GNU的汇编器gas(as),使用GNUld链接器来链接产生的目标文件。as86+ld86是由MINIX-386的主要开发者之一BruceEvans编写的Intel8006、80386汇编编译程序......