Jenkins系列:3、wsl/ubuntu安装Jenkins及Jenkins构建可交叉编译的go程序

2023-11-20

Jenkins系列:3、wsl/ubuntu安装Jenkins及Jenkins构建可交叉编译的go程序


1. 前言

前面我们已经安装配置好Jenkins,也了解到Jenkins构建自由软件的流水线,下面我们先使用Jenkins来实现在wsl下交叉编译构建Go程序,为我们后续打包整个项目工程做铺垫,因为整个项目工程部分程序为Go程序,还有一部分是Java程序,所以我们先掌握单独编译各个程序,然后再将各个程序打包,最后将打包程序上传到发布网站上。

2. wsl/Ubuntu安装Jenkins及配置

2.1 wsl上安装Jenkins及简单配置

在Windows下比较推荐使用wsl的方式安装Jenkins,这样切换到Linux时也会比较熟悉,如果资源等可以的话,更推荐使用docker方式。这里以wsl+Ubuntu简单说明下wsl安装Jenkins,后续的go程序编译也是在wsl上的。

#安装jdk、jre
sudo apt install default-jdk default-jre
#添加GPG keys
wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
#添加Jenkins镜像地址
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
#安装Jenkins
sudo apt update
sudo apt install jenkins
#启动Jenkins
sudo /etc/init.d/jenkins start

或者通过官方的方法:https://pkg.jenkins.io/debian-stable/

curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo tee \
    /usr/share/keyrings/jenkins-keyring.asc > /dev/null
    
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
    https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
    /etc/apt/sources.list.d/jenkins.list > /dev/null
    
sudo apt-get update
sudo apt-get install jenkins

之后简单配置还是通过浏览器访问wsl的8080端口(由于wsl一般和Windows共用网络,所以直接在Windows下使用localhost:8080)即可,不清楚的可以看第一节我们在Windows上安装的过程,基本都是一样的。

在这里插入图片描述

2.2 常见问题

问题1:The repository ‘https://pkg.jenkins.io/debian-stable binary/ Release’ does not have a Release file

sudo apt upgrade 
sudo apt update
sudo apt-get install jenkins -y

问题2:部分wsl Ubuntu16.04或18.04上安装时添加gpg失败

sudo apt install ca-certificates

问题3:部分阿里云Ubuntu16.04上安装可能也会出问题

sudo apt-get update -y
sudo apt-get upgrade -y

sudo apt install openjdk-11-jdk -y
java -version

wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | apt-key add -

sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > \
e>     /etc/apt/sources.list.d/jenkins.list'

sudo apt-get update -y

sudo apt-get install jenkins -y

3. 安装配置钉钉机器人插件

在这里插入图片描述

在插件管理中搜索DingTalk然后安装重启即可,配置使用dingtalk提醒构建结果我们在整个过程中体现。

在这里插入图片描述

安装好之后需要还需要在系统配置中配置钉钉机器人:

在这里插入图片描述

找到钉钉这一项,然后新增:

在这里插入图片描述

然后通过申请的钉钉机器人给予的信息添加进去,id暂时不用写,最后点击测试即可(对于申请钉钉机器人不清楚的可以参考这里:https://blog.csdn.net/weixin_39510813/article/details/121168140?spm=1001.2014.3001.5501):

在这里插入图片描述

然后在构建配置时就可以选择机器人了,如果你有多个机器人都在系统配置的钉钉配置那里新增即可,目前没有测试过上限是几个。

测试成功类似如下:

在这里插入图片描述

注意:安装配置完成之后需要重启一下Jenkins才能生效,否则可能会出现配置了之后发现构建成功与否都没有发送消息到钉钉上。

4. 构建任务过程

4.1 新建自由项目

选择自由项目后确定即可:

在这里插入图片描述

4.2 完成项目描述并设置钉钉机器人

点击后面的❓会有帮助,不明白的查看帮助即可:

在这里插入图片描述

4.3 指定并设置git仓库和用户名密码

在这里插入图片描述

4.4 设置构建触发器

可以选择定时构建或者GitHub、gitee等有提交时触发构建的教程,可以参考设置提交代码触发构建,这里展示每周一9点构建,这里的时间和crontab的语法是类似的,同样可以查看帮助:

在这里插入图片描述

4.5 构建环境(设置环境变量)

go程序编译这里暂时我们不设置这里的构建环境,我们在系统配置中设置环境变量PATH,否则可能会出现执行shell脚本等是找不到命令(即gf/go command not found等)。

进入系统配置:

在这里插入图片描述

找到全局属性并添加环境变量PATH:

在这里插入图片描述

PATH的值可以按照需要添加,也可以通过命令查看PATH的结果全部添加进来:

在这里插入图片描述

如果某个命令没有添加到这里的PATH,按照如上格式添加即可,示例(各个路径之间以冒号隔开):

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

4.6 构建

构建命令我们仍使用shell命令,如果PATH配置好的话就不会出问题:

在这里插入图片描述

cd /mnt/d/code/gateway-web-service
CGO_ENABLED=1 CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ GOOS=linux GOARCH=arm64 gf build main.go -o ./bin/GATEWAY-WEB --pack public --swagger -y

对于有确认的命令加-y自动确认即可。

4.7 构建后操作

这里我们已发邮件作为示例,实际上我们配置好的钉钉插件也已经发送了钉钉通知,邮件通知有的时候更正式一些:

在这里插入图片描述

5. 结果展示

选择立即构建,构建成功与否的结果会显示出来:

在这里插入图片描述

点击对应的构建历史可以查看构建控制台输出:

在这里插入图片描述

生成的程序也可以在相关目录找到了。

钉钉上也收到了构建结果:

在这里插入图片描述

6. 扩展-跨Windows和Linux文件系统工作

通过微软的帮助文档,我们了解如何跨文件系统工作,即Windows和Linux命令之间的互操作:https://docs.microsoft.com/zh-cn/windows/wsl/filesystems

这样的话,我们就可以在Windows下调用wsl的Linux命令,从而方便进行交叉编译cgo程序,比如在Windows上写一个脚本启动wsl下的程序构建或者wsl调用windows下的一些命令。

7. 最后

接下来我们将学习使用wsl的Jenkins调用maven编译jar包,之后再将jar包和go程序结果统一打包。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jenkins系列:3、wsl/ubuntu安装Jenkins及Jenkins构建可交叉编译的go程序 的相关文章

  • 使用 Jenkins Git 插件中的 SSH 密钥在构建期间运行 Git 命令

    我们在 Jenkins 上的构建作业作为发布构建的一部分运行一些 git 命令 例如 git push 和 git pull 因此需要一种在构建期间从 shell 运行经过身份验证的 git 命令的方法 我们的詹金斯奴隶不持有任何凭证 因为
  • 使用与后期步骤中的 Shell 脚本中的克隆相同的 http git 凭据

    我想要自动化我们的发布过程 并且我有一个 Maven 项目的以下 Jenkins 构建作业 使用配置的 Jenkins 凭证 用户名 密码 克隆 Git 存储库 执行一些 Maven 命令以进行构建 配置一个后步骤来执行一些额外的 Git
  • BitBucket+Jenkins:仅在特定分支更改时触发构建

    以下是该问题的据称解决方案 尽管它看起来确实是一种解决方法 而不是最终的解决方案 有没有一种方法 通过作业配置或 bitbucket 挂钩配置 我可以将作业设置为仅在推送到特定分支时运行构建 是否可以仅从一个特定分支触发 Jenkins h
  • 使用mongodb+srv配置Mongo

    我在 docker 上启动 mongo 所以默认主机 localhost port 27017 用户名 root密码 example 现在我想通过连接字符串进行连接 mongodb srv root example localhost si
  • 在使用 Ant/Jenkins 时,如何查看同一 Java 项目的不同 Subversion 标签/分支?

    这是我的开发配置 颠覆之下 我有我的project X trunk 带有我最新的开发人员 我有我的project X tags 具有不同的版本 我正在考虑添加一个分支文件夹 我正在使用 Jenkins 使用 Ant 脚本构建我的projec
  • IntelliJ IDEA 无法在 Ubuntu 上启动

    我用IDEA好几个月了 到现在还可以 现在从快捷方式启动IDEA没有效果 我想这是在一些更新之后发生的 我尝试重新安装IDEA 但问题仍然存在 从终端启动 idea sh 会产生类似的效果 chronoexp ChronoExp PC Pr
  • 詹金斯:${BUILD_LOG, maxLines, escapeHtml} 不起作用

    我正在尝试使用 BUILD LOG maxLines escapeHtml 如下所述 如何从 BUILD LOG 变量中获取最后 20 行 https stackoverflow com questions 16089096 how can
  • 如何从 docker 容器运行 webpack 构建?

    我正在制作的应用程序是用 ES6 编写的 其他好东西是由 Docker 容器内的 webpack 转译的 目前 一切工作从创建内部目录 安装依赖项到创建编译的捆绑文件 当运行容器时 它说 dist bundle js 不存在 除非我在主机目
  • Jenkins - Xcode 构建工作协同设计失败

    下面是我的构建脚本 不使用 xcodebuild 插件 构建步骤工程 我使用所需的证书和私钥创建了一个单独的钥匙串 它们在钥匙串访问中可见 脚本中的钥匙串命令不会失败 安全列表钥匙串将这些显示为有效的钥匙串 它的表现就像解锁命令并未真正成功
  • 无法安装 psycopg2 Ubuntu

    试图为 django 项目准备好服务器 但我在设置 postgres 时遇到了一些问题 我正在遵循本指南 https jee appy blogspot com 2017 01 deply django with nginx html ht
  • 在 Ubuntu 上纯粹通过 bash 脚本安装 mysql 5.7

    我想要一个无需任何手动输入即可安装 MySQL 5 7 实例的 bash 脚本 我正在关注数字海洋教程 https www digitalocean com community tutorials how to install mysql
  • Hudson 和电子邮件通知

    我可以覆盖每个作业的 Hudson 设置 系统管理员电子邮件地址 吗 阅读了一些源代码http sorcerer jenkins ci org http sorcerer jenkins ci org and hudson tasks Ma
  • 箭头键变成 Telnet 中的控制字符

    我在 Ubuntu 终端中 并通过 telnet 连接到服务器 现在每当我输入 up 时 它就会变成 A 其他箭头键也变成控制字符 有没有办法可以运行 telnet 以便它理解我的箭头键 这将是一个巨大的帮助 因为我想在我的命令历史记录中向
  • 使用多分支管道触发詹金斯构建标签创建

    我有一个舞台我的詹金斯文件 https github com ryandawsonuk activiti build blob 5d60df0b0e1410f901c64313d90e7aa03054c1df Jenkinsfile L79
  • Ubuntu 12.04 上的 PHP 从 5.3 升级到 php 5.6

    我正在按照本教程将 php 从版本 5 3 升级到 5 6 http phpave com upgrade php 53 to php 56 on ubuntu 1204 lts http phpave com upgrade php 53
  • Jenkins 管道和 java.nio.file.* 方法的问题

    我正在尝试使用 java nio file 中的方法在 Jenkins 管道中执行一些基本文件操作 无论代码存在于哪个节点块中 代码都在主节点上执行 在管道中 我已经验证了各个节点块都是正确的 它们唯一地标识了特定的节点 但是 pathEx
  • 标准头文件中的 C 编译器错误 - 未定义的 C++ 定义

    我正在尝试编译 C 程序 但收到许多错误 这些错误是在标准 C 头文件 inttypes h stdio h stat h 等 中遇到的 错误的来源是以下未定义的常量 BEGIN DECLS END DECLS BEGIN NAMESPAC
  • 在 Ubuntu 16.04 上找不到 printf.c

    我最近切换到Ubuntu 16 04 我在用vscode作为 Ubuntu 上的 IDE 我配置了其他语言 但我无法做到这一点C C 我创建c cpp properties json launch json tasks json 当我开始编
  • Apache 反向代理的基本身份验证问题

    我想为在 Ubuntu 服务器 12 04 1 上运行的 Apache 反向代理站点添加基本身份验证 网络应用程序是Jenkins http jenkins ci org运行在 Java EE 容器上 我在中添加了以下配置httpd con
  • Ubuntu 12.04 上的 DeepDive 安装指南

    在拥有以后很多问题 https stackoverflow com questions 22469188 deepdive installation postgresql error安装深潜项目 http deepdive stanford

随机推荐