3 月份入职一家新公司,使用的是纯 flutter,对我来说是一个挑战。我是 Android 开发,对于 Flutter 也就停留在学习过基础语法,接入过原生项目,混合栈的开发。
老实说,我担心自己连 UI 都画不来。
不过幸好遇见一个很好的公司,能够给你时间过渡重新学习,再逐步进入项目开发中。当然这些情况在面试过程中都已经了解。
刚入职的一段时间,除了学习 Flutter,熟悉项目之外,我调研了主题适配,以一个页面作为 demo 输出,与设计师方等进行沟通。
其他事情就有活就干,没活就可以继续学习,我自己也找了一些活,比如:打包脚本修改。
此文记录一下我踩过的坑。
一、多分支 Pipeline 和单分支 Pipeline
一个打包的 job 可以创建多种风格,比较常用的就是 【流水线】 和 【多分支流水线】
流水线:是单分支的,可以在配置中进行 SCM(Source Control Management) 配置,如下图所示。
git 仓库地址、分支名等都可以进行配置
多分支流水线 多分支的,同样也可以配置 SCM,配置类似,略。支持分支进行通配符支持。只要通过筛选的才可以显示在多分支 job 中,称为一个一个单独的 Pipeline,也就是多分支流水线其实是由多个单分支流水线组成。
请记住这点,后面很多多分支上的配置同样适用于单分支 Pipeline 中。
问题
如何在流水线中切分支?
虽然多分支 Pipeline 支持多分支,但其实是没有那么灵活的。试想一下,一个团队那么多人,一般有权限配置分支就只有一两个人,而每个人都想切一个新分支来进行 feature 功能开发。就假设,每个人都有权限,开了分支就出现在多分支的 Pipeline 中,那过多的分支就会造成Pipeline很多。
于是,我就增加了切分支的功能,当然适用于单分支 Pipeline。
-
parameters 增加分支参数选择的选项,最开始我使用的是一个输入框,但是输入框有输入分支错误的风险,就改成了选择框,gitParameter 会自动筛选出符合要求的分支。
- type:PT_BRANCH:表明筛选的是分支;PT_BRANCH_TAG: 表明筛选的是分支和 tag。
- 其余的都很明显知道什么意思,略。
-
stage 增加切分支的流程,when 条件表明什么情况下才会执行此 stage,只有符合要求的才会切分支,否则使用当前 Pipeline 的分支,比如多分支中,你从哪个 Pipeline 发起就是哪个分支的。
-
切分支主要使用的是 GitSCM,branches是一个
List<List<String>
的数据类型,这个我最开始就总是弄错,导致总是切分支失败,也就是两个中括号。 -
其他的配置项我也没有深入研究,都是直接继承当前分支的设置,有兴趣的同学可以自行了解。
parameters {
gitParameter(name: 'BRANCH',
type: 'PT_BRANCH',
branchFilter: 'origin/(.*)',
defaultValue: '',
selectedValue: 'DEFAULT',
sortMode: 'ASCENDING_SMART',
description: 'Select your branch or tag. if not selected, the branch is current branch'
)
}
stage('Checkout Branch') {
when {
expression { params.BRANCH != '' && params.BRANCH != null}
}
steps {
checkout([
$class: 'GitSCM',
branches: [[name: params.BRANCH]],
userRemoteConfigs: scm.userRemoteConfigs,
])
}
}
如果不同分支的 jenKinsFile 文件变了怎么办?
通过 GitSCM
切的分支,我尝试了很多次,无法应用切的分支的 jenKinsFile,jenKinsFile 始终是当前分支最后一次提交的时候的 jenKinsFile,有时生效需要等到下一次 build。所以如果涉及到 JenKinsfile 的改动打包,请依然使用原有的 多分支。
如何看我分支切成功了呢?
- 方法一:在打包后的 status 看,看到这里有两个 git 记录,就表明切了分支。
- 方法二:在打包 log 中看,最开始有 git 的记录,看是否有 checkout 记录。
二、JenKinsFile 中的字符串
经常,我们一行字符串很长,有时会用 --参数
等形式来给 sh 脚本/python 脚本传参。
那么怎么换行呢?
你肯定想的是 + 来进行,恭喜你答错了!
使用 + 的方式在 jenkinsFile 文件中是不管用的,需要使用“三个引号和反斜杠的方式”。如下所示
def scriptParams = """--flavor=${params.params1} \
--params1=$feishuToken \
--build_id=${env.BUILD_ID} \
--job-name=${env.JOB_NAME} \
--branch-name=${env.BRANCH_NAME}"""
"python3 scripts/build.py $scriptParams"
====================================
这期的分享就先到这里了。欢迎关注我,一起成长。