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 找不到

在这里插入图片描述

本地随意打开能正常打包的 as 工程,复制下面文件sdk.dir的路径配置到 Jenkins 环境变量 ANDROID_HOME,重新打包即可

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

5. 产物归档

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/957473.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

人工智能之深度学习_[4]-神经网络入门

文章目录 神经网络基础1 神经网络1.1 神经网络概念1.1.1 什么是神经网络1.1.2 如何构建神经网络1.1.3 神经网络内部状态值和激活值 1.2 激活函数1.2.1 网络非线性因素理解1.2.2 常见激活函数1.2.2.1 Sigmoid 激活函数1.2.2.2 Tanh 激活函数1.2.2.3 ReLU 激活函数1.2.2.4 SoftMa…

卸载和安装Git小乌龟、git基本命令

卸载 Git 打开控制面板: 按 Win R 打开运行对话框,输入 control 并按回车键。或直接在功能搜索里搜索“控制面板”。在控制面板中,选择“程序”或“程序和功能”。 查找并卸载 Git: 在程序列表中找到“Git”或“Git for Windows…

群论学习笔记

什么是对称? 对称是一个保持对象结构不变的变换,对称是一个过程,而不是一个具体的事物,伽罗瓦的对称是对方程根的置换,而一个置换就是对一系列事物的重排方式,严格的说,它也并不是这个重排本身…

C语言自定义类型:结构体

结构体简介: c语言里int 、float、double、等等类型来表示一个对象,但有时也有未能表达的对象,比如表示一个人的类型,这个类型里有人的身高、体重、年龄等等,这就需要很多个类型来拼凑,这就很不方便。于是…

【整体介绍】

ODO:汽车总行驶里程 Chime: 例如安全带没系的报警声音 多屏交互就是中控屏的信息会同步到主驾驶的仪表盘上 面试问题:蓝牙电话协议HFP 音乐协议A2DP 三方通话测试的逻辑

线性规划:机器学习中的优化利器

一、线性规划的基本概念 线性规划(Linear Programming, LP)是运筹学中数学规划的一个重要分支,用于在一组线性不等式的约束条件下,找到线性目标函数的最大值或最小值。其问题可以表述为: 在一组线性约束条件 s.t.&am…

SurgiTrack:外科手术视频中的细粒度多类别多工具跟踪|文献速递-视觉大模型医疗图像应用|文献速递-视觉大模型医疗图像应用

Title 题目 SurgiTrack: Fine-grained multi-class multi-tool tracking in surgical videos SurgiTrack:外科手术视频中的细粒度多类别多工具跟踪 01 文献速递介绍 手术器械跟踪在计算机辅助手术系统中发挥着至关重要的作用,可为一系列应用提供有价…

亚博microros小车-原生ubuntu支持系列:1 键盘控制

背景:电脑配置不太行,我在ubuntu再运行vmware,里面运行亚博官方的虚拟机镜像ubuntu,系统很卡。基本上8G内存给打满了。还是想把亚博官方的代码迁移出来,之前售后就说除了官方镜像虚拟机,需要自己摸索迁移。…

总结5..

#include<stdio.h> struct nb {//结构体列队 int x, y;//x为横坐标&#xff0c;y为纵坐标 int s, f;//s为步数&#xff0c;//f为方向 }link[850100]; int n, m, x, y, p, q, f; int hard 1, tail 1; int a[52][52], b[52][52], book[52][52][91]; int main() { …

鸿蒙系统 将工程HarmonyOS变成OpenHarmony

DevEco Studio软件创建工程后需要修改两个地方&#xff1a; 修改第二个build-profile.json5文件 将原先内容&#xff1a; {"app": {"signingConfigs": [],"products": [{"name": "default","signingConfig": &q…

什么样的问题适合用递归

递归是一种通过函数调用自身来解决问题的方法。递归适用于那些可以被分解为相似子问题的问题&#xff0c;即原问题可以通过解决一个或多个更小规模的同类问题来解决。递归通常需要满足以下两个条件&#xff1a; 递归基&#xff08;Base Case&#xff09;&#xff1a;问题的最简…

C# 网络协议第三方库Protobuf的使用

为什么要使用二进制数据 通常我们写一个简单的网络通讯软件可能使用的最多的是字符串类型&#xff0c;比较简单&#xff0c;例如发送格式为(head)19|Msg:Heart|100,x,y,z…&#xff0c;在接收端会解析收到的socket数据。 这样通常是完全可行的&#xff0c;但是随着数据量变大&…

认识BOM

BOM 弹出层 可视窗口尺寸 屏幕宽高 浏览器内核和其操作系统的版本 剪贴板 是否允许使用cookie 语言 是否在线

国产编辑器EverEdit - 大纲视图

1 大纲视图 1.1 应用场景 在编辑较长代码文件时&#xff0c;使用大纲视图可以方便的检视当前文件的变量、函数等信息&#xff0c;方便在不同函数间跳转&#xff0c;对整个文档的全貌了然于胸。   在编辑XML文档时&#xff0c;通过展示XML文件的层次结构、节点布局&#xff0…

(2)STM32 USB设备开发-USB虚拟串口

例程&#xff1a;STM32USBdevice: 基于STM32的USB设备例子程序 - Gitee.com 本篇为USB虚拟串口教程&#xff0c;没有知识&#xff0c;全是实操&#xff0c;按照步骤就能获得一个STM32的USB虚拟串口。本例子是在野火F103MINI开发板上验证的&#xff0c;如果代码中出现一些外设的…

68,[8] BUUCTF WEB [RoarCTF 2019]Simple Upload(未写完)

<?php // 声明命名空间&#xff0c;遵循 PSR-4 自动加载规范&#xff0c;命名空间为 Home\Controller namespace Home\Controller;// 导入 Think\Controller 类&#xff0c;以便扩展该类 use Think\Controller;// 定义 IndexController 类&#xff0c;继承自 Think\Control…

AutoGen入门——快速实现多角色、多用户、多智能体对话系统

1.前言 如https://github.com/microsoft/autogen所述&#xff0c;autogen是一多智能体的框架&#xff0c;属于微软旗下的产品。 依靠AutoGen我们可以快速构建出一个多智能体应用&#xff0c;以满足我们各种业务场景。 本文将以几个示例场景&#xff0c;使用AutoGen快速构建出…

阿九的python 爬虫进阶课18.3 学习笔记

文章目录 前言1. 爬取大标题2. 爬取小标题3. 证券栏下的标题4. 某篇文章里的具体内容 前言 网课链接&#xff1a;https://www.bilibili.com/video/BV1kV4y1576b/新浪财经网址&#xff1a;https://finance.sina.com.cn/需先下载库&#xff1a; conda install lxml布置爬取的一…

WGCAT工单系统部署教程

第一步、安装JDK WGCAT部署所在主机需要JDK环境&#xff08;JDK1.8、JDK11都可以&#xff09;&#xff0c;OpenJDK也可以&#xff0c;更高版本JDK也支持&#xff0c;一般推荐使用JDK1.8或JDK11 参考&#xff1a;linux CentOS系统安装jdk教程_centos安装jdk-CSDN博客 第二步、…

自动化01

测试用例的万能公式&#xff1a;功能测试界面测试性能测试易用性测试安全性测试兼容性测试 自动化的主要目的就是用来进行回归测试 新产品--第一个版本 (具备丰富的功能)&#xff0c;将产品的整体进行测试&#xff0c;人工创造一个自动化测试用例&#xff0c;在n个版本的时候…