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

  1. 安装jenkins
  2. 配置java环境,android sdk环境,flutter环境
  3. 配置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

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

    image.png

     

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

    image.png

     

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

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

    image.png

     

    此时在浏览器输入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
    

    输入flutter doctor验证是否配置成功


    image.png
    1. 第一次安装会让同意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
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    posted @   小强找BUG  阅读(319)  评论(0编辑  收藏  举报
    相关博文:
    阅读排行:
    · 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
    · 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
    · 【自荐】一款简洁、开源的在线白板工具 Drawnix
    · 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
    · Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
    点击右上角即可分享
    微信分享提示