linux环境下的jenkins+flutter自动化打包全记录

本文详细记录了在Linux系统下使用Jenkins配合Flutter进行自动化打包的过程,包括设置Git仓库、解决免密克隆问题、配置Flutter和Gradle环境、处理依赖错误以及最终实现自动化打包的完整步骤。

      最近在做测试的时候,有个挺让人糟心的事,就是每次都得自己跟开发人员要新包测试,作为一个曾经的开发人员,我觉得还是自力更生更稳妥些。再说了,打包这种小事,难得到我吗?毕竟我以前是安卓开发。既然打算自己弄,那干脆把自动化打包排上日程吧。接下来就来讲讲我的linux环境下的jenkins+flutter自动化打包历程。

先说一下我这边的具体情况,项目是放在Git上进行管理的。打包环境是linux系统,我本地是Windows环境。有一个比较出乎意料的情况,就是明明一个项目仓库搞定,却分成了四个仓库去管理,因此也就有了四个仓库地址。我的同事还告诉我他每次要打开四个AS的窗口。额,flutter这么不智能的吗?怪我离开Android圈有点久了。既然这样,那也没关系,源码管理我添加四个仓库不就得了。

1、在源码管理里面添加仓库地址,选择对应凭据,如下图所示:

Repository URL:仓库地址,这里填的就是项目在Git上对应的网址。

Credentails:这个是在Jenkins里选择一个凭据,而这个凭据的信息必须是正确的可以拿取对应Git项目的账号密码。

考虑到有些朋友可能都没有生成自己的凭据,顺便就讲一下如何在Jenkins里面新增凭据吧~

(1)在Jenkins的左侧功能菜单里面找到“凭据”并点击,一路点击“系统”->“全局凭据”,如下图所示:

(2)在全局凭据界面点击“添加凭据”按钮,用户名也就是Git账号,密码就是Git密码,ID和描述可不填,点击确定就生成了一个新的凭据。

(3)接着我们就可以在项目的源码管理步骤里使用这个凭据了,要注意的是,一定要是正确的,对要获取的项目有权限的Git账号密码,否则会报错,如下图所示:

在这里呢,我选择的是我自己的,不过同样也出现了这么个报错问题,查找了资料后发现,原来是我的阿里云账号密码和我的Git账号密码不一致,所以我就去修改了自己的阿里云账号密码,更新了凭据,就解决了这个报错问题。

2、接着说我的自动化打包配置,在我配置好了源码管理步骤后,我先构建了一下,想看看能正常拿到项目不。我以为他们会好好的拿下来给我放在一个文件夹里头,结果去项目路径下一看,只有一个,也就是第一个。why?不懂不懂。我问同事,可以给我放一个项目里面吗?(因为我以前都是一个项目路径搞定的呀,在我看来那四个仓库对应的应该是一个主模块和三个子模块)同事表示现在改起来麻烦,建议我不要用这个源码管理,直接git clone拿下来,还建议我写个shell脚本。(内心:你这是为难我?嘴上:好吧。)其实也不是什么太难的事,那么开干。

3、首先,当然要去看一下有没有安装git了,运行 git --version,好在这台linux服务器上安装了。于是我就先试着git clone了一个项目,发现每次都要输入用户名和密码,这也有点烦人了吧。对于我这种喜欢偷懒的人来说,自然要找个免密的方法,很多都推荐什么新建一个git-credentials文件,然后输入账号密码啥的。可是这个服务器上的文件不是我一个人用,而且确实我这么干,其他同事拿项目出问题了。所以说一个最简单的方法,假设我的账号密码以及项目路径如下所示:

账号:admin
密码:adminpwd
项目路径:https://code.aliyun.com/xyz-android/xyz.git

那么我只要运行下面的命令行

git clone http://admin:adminpwd@code.aliyun.com/xyz-android/xyz.git

也就是http://{账号}:{密码}@{去掉“https://”头的项目路径},就把项目拿下来了。

2、接着就是直接运行“gradle assembleRelease”,很快就报错了:

/tmp/jenkins6506222782365030194.sh:行3: gradle: 未找到命令
Build step '执行 shell' marked build as failure

我明明已经安装了gradle呀,环境变量也配好了,左思右想,以前好像也遇到过这种问题。果然,在查看了之前的笔记发现,要记得先运行source命令,让配置的环境变量生效。于是,运行source ~/.profile。

:~/.profile是我配置gradle的环境变量文件,大家可能不是这个,根据自己本地的来。

接着运行gradle assembleRelease就没报这个错误了,但你以为这就打包成功了,天真~事情怎么可能这么简单?

3、前面我说过,我本身环境是windows的,而服务器环境是linux的,flutter sdk、android sdk的路径和我自己本地的不一样(如果是同一个环境,我还可以配置成一样的),所以需要重新配置,好在这次同事配合了,主动给我把那两个路径改了并提交了,其实如果他不改,我就写个小脚本改一下,虽然我对shell脚本不熟练,但改改配置文件的脚本还是能写出来滴~)。只是当我一运行,发现少了个“.package”,用命令行一查,不是少了,而是隐藏了。于是我先去查看了一下本地这个文件的内容,发现它记录的是本地flutter的一些文件路径,那肯定在linux环境里会报错呀,需要更新才对。这个我还真的不熟悉了,虚心地跟同事请教,然后他告诉我可以用flutter pub get命令去生成这个“.package”文件。

4、进入主模块的路径下,运行“flutter pub get”命令行,这里又报了个flutter的错误,如下图所示:

sxs@localhost android]# flutter pub get
-bash: flutter: 未找到命令

举一反三,估计又是配置flutter的环境变量没生效,解决方法和上面一下,运行命令source /etc/profile,顺利地生成了一个“.package”文件。

:/etc/profile是我配置flutter环境变量的文件

5、一切似乎都差不多了,只是还遇到了后面几个报错了,比如说:下载不到某个jar包资源,具体如下:

Execution failed for task ':app:lintVitalRelease'.
> Could not resolve all files for configuration ':app:lintClassPath'.
   > Could not download groovy-all.jar (org.codehaus.groovy:groovy-all:2.4.15)
      > Could not get resource 'https://jcenter.bintray.com/org/codehaus/groovy/groovy-all/2.4.15/groovy-all-2.4.15.jar'.
         > Connection reset

解决方法:找到安装的flutter路径下的...\packages\flutter_tools\gradle\flutter.gradle,对这个文件中的build.scrpits和allprojects做更改,具体如下:

buildscript {
    repositories {
        //google()
        //jcenter()
        maven { url"https://maven.aliyun.com/repository/google"}
        maven { url"https://maven.aliyun.com/repository/jcenter"}
        maven { url"http://maven.aliyun.com/nexus/content/groups/public"}
    }
}

...

project.rootProject.allprojects {
    repositories {
        //google()
        //jcenter()
        maven { url"https://maven.aliyun.com/repository/google"}
        maven { url"https://maven.aliyun.com/repository/jcenter"}
        maven { url"http://maven.aliyun.com/nexus/content/groups/public"}
    }
}

同理,找到android目录下的build.gradle,也用

maven { url"https://maven.aliyun.com/repository/google"}
maven { url"https://maven.aliyun.com/repository/jcenter"}
maven { url"http://maven.aliyun.com/nexus/content/groups/public"}

去替代

google()
jcenter()

6、找不到某个依赖,报错如下:

Could not determine the dependencies of task ':app:lintVitalRelease'.
> Could not resolve all artifacts for configuration ':app:debugCompileClasspath'.
   > Could not find io.flutter:flutter_embedding_debug:1.0.0-d1bc06f032f9d6c148ea6b96b48261d6f545004f......

解决方法:找到android目录下的build.gradle,在allprojects里面加上这样一行:

maven { url "https://storage.googleapis.com/download.flutter.io" }

最后终于成功了,还好我没放弃。

7、把用到的shell命令都放在构建步骤里面去,在构建步骤里面新增一个“Execute shell”,依次填入前面步骤中用到的命令,具体如下图:

8、最后在构建后操作中选择“Archive the artifacts”,把我们打包成功的安装包作为归档文件存放起来,具体如下图:

可以看到我们的自动化打包已经成功了,直接点击右侧构建结果的app-release.apk下载安装使用。

在文章的末尾,附上所有命令行,大家也可以把它放在一个shell脚本里面,打包的时候运行这个脚本就可以了,这就是本次自动化打包的全部过程。

rm -rf /usr/jenkins/workspace/android_test
cd /usr/jenkins/workspace
mkdir android_test
#git地址格式
git clone -b develop http://admin:adminpwd@code.aliyun.com/android/flutter_x.git /var/lib/jenkins/workspace/android_test/xxx
git clone -b develop http://admin:adminpwd@code.aliyun.com/android/flutter_y.git /var/lib/jenkins/workspace/android_test/yyy
git clone -b develop http://admin:adminpwd@code.aliyun.com/android/flutter_z.git /var/lib/jenkins/workspace/android_test/zzz
git clone -b develop http://admin:adminpwd@code.aliyun.com/android/flutter_a.git /var/lib/jenkins/workspace/android_test/aaa
cd /var/lib/jenkins/workspace/android_test/xxx/android
source ~/.profile
flutter pub get
source /etc/profile
gradle assembleRelease

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值