当前位置: 首页 > article >正文

Jenkins 启动

废话

这一阵子感觉空虚,心里空捞捞的,总想找点事情做,即使这是一件微小的事情,空余时间除了骑车、打球,偶尔朋友聚会 … 还能干什么呢?

当独自一人时,究竟可以做点什么,填补这空虚的一天?我目前能想到的就只有学习,技术是坚实的保障,学习为成长提供充足的养分。

当你跳出舒适区或者面临裁员之际,摆在面前的首要任务便是更新简历。而此时,能否刷新那些令自己感到满意的技能或经验,很大程度上取决于你在此前所进行的学习以及积累的成果。在未来和当下希望自己能够有计划的学习。

持续集成 CI、持续部署 CD,或许你没注意到但应用广泛也十分重要。

在这里插入图片描述

安装

brew install jenkins-lts

启动

brew services start jenkins-lts

但是,遇到启动服务失败(通常应该是网络问题,毕竟被墙住了)

在这里插入图片描述

有点疑惑,我执行一次brew services list查看服务竟然克隆成功了,并且再执行服务启动也成功了(可能是网络突然又行了吧,就当运气好吧)

在这里插入图片描述

还有其他命令:最后一个是服务名称

  • 停止服务:brew services stop jenkins-lts
  • 重启服务:brew services restart jenkins-lts
  • 更新服务:brew upgrade jenkins-lts

项目

浏览器访问http://localhost:8080正常是会弹出 Jenkins 页面(首次访问会引导你设置管理员密码)

在这里插入图片描述

复制页面的路径,使用 cat 或 more 等命令可查看密码

在这里插入图片描述

Next 按需安装插件

在这里插入图片描述

构建

创建一个 Jenkins 流水线模板,这里有好几个不同类型的模板,后面在探索其他模板

在这里插入图片描述

我们创建一个 Android 项目推送到远程仓库,国内嘛那就使用 gitee 管理方便些吧,接下来在我们创建的流水线模板 配置仓库地址

在这里插入图片描述

只配置仓库直接构建可能会遇到一些问题

在这里插入图片描述

1. 仓库克隆失败

那么我们需要配置凭证(克隆通常都是需要的),在这里创建凭证,并选择所使用的凭证再构建就能克隆仓库了

在这里插入图片描述
在这里插入图片描述
构建之后看工作空间仓库已经被克隆下来了,那么接下来就可以配置流水线命令执行任务了
在这里插入图片描述

2. ANSI 输出无彩色

我们需要安装一个 Jenkins 的插件 AnsiColor

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3. Gradle 找不到

在这里插入图片描述

代码克隆下来了,但是执行报错

在这里插入图片描述

但是在本地终端直接操作assembleRelease是能构建成功的,说明系统 gradle 环境变量应该没问题啊,奇了怪了这

在这里插入图片描述

找不到 gradle 问题通过设置${WORKSPACE}能过正确找到 gradle,${WORKSPACE} 意思是当前构建任务工作目录路径,那么我们本任务克隆的项目是 Android 项目,目录下就有现成的 gradle。

在这里插入图片描述

在这里插入图片描述

但是,构建开始不久又遇到了新的问题,jdk 版本过低

Android Gradle plugin requires Java 17 to run. You are currently using Java 11.

Your current JDK is located in /Library/Java/JavaVirtualMachines/microsoft-11.jdk/Contents/Home

在这里插入图片描述

可是,终端查看 jdk 版本明明是 17 啊,他怎么读到哪里去了

在这里插入图片描述

那就想办法让 Jenkins 打包使用 jdk17 好了

在这里插入图片描述

配置 JAVA_HOME 之后直接 Rebuild 总算是打包成功了

4. 产物归档

但是又又发现了一个新的问题,既然是 Android 工程构建,那产物必然有安装包,打包构建生成的 apk 在哪里?

在这里插入图片描述

在项目配置里面新增构建后操作 -> 归档成品,再配置合适的归档文件路径即可

在这里插入图片描述

再打包,匹配到 *.apk 文件,产物归档成功。

在这里插入图片描述

至此,你的第一个 Jenkins 自动化构建任务正常运行,以你的聪明才智,我想你应该有很多想法迫不及待想去实践吧😄


http://www.kler.cn/a/512120.html

相关文章:

  • 【计算机体系结构、微架构性能分析】core 与 uncore 分别是哪一些部分?区分 core 和 uncore
  • 利用R计算一般配合力(GCA)和特殊配合力(SCA)
  • 网络变压器的分类
  • 后盾人JS -- 好用的 JavaScript Symbol 类型
  • 【记录52】el-table-column 添加fixed属性 滚动条无法滑动
  • 【青蛙过河——思维】
  • PHP语言的循环实现
  • AnnData对象数据结构解释:n_obs × n_vars
  • ubuntu修改hosts文件使之能下载github的文件
  • WPS数据分析000003
  • H3CNE-15-RIP协议
  • 初识NLP
  • LeetCode 110.平衡二叉树
  • 《Apple Store 上架过包》Guideline 4.3(a) - Design - Spam 解决 4.3 垃圾邮件
  • [c语言日寄]内存初阶:大端字节序和小端字节序
  • leetcode 3097. 或值至少为 K 的最短子数组 II 中等
  • Scade 表达式 - 使用索引的迭代器
  • 【算法学习笔记】35:扩展欧几里得算法求解线性同余方程
  • 2024微短剧行业生态洞察报告汇总PDF洞察(附原数据表)
  • 电子科大2024秋《大数据分析与智能计算》真题回忆
  • mysql的mvcc
  • 详解共享WiFi小程序怎么弄!
  • RFID系统安全认证协议及防碰撞算法研究(RFID Security)
  • Linux 存储设备和 Ventoy 启动盘制作指南
  • Linux C\C++方式下的文件I/O编程
  • Oracle 创建并使用外部表