前面我们已经安装配置好Jenkins,也了解到Jenkins构建自由软件的流水线,下面我们先使用Jenkins来实现在wsl下交叉编译构建Go程序,为我们后续打包整个项目工程做铺垫,因为整个项目工程部分程序为Go程序,还有一部分是Java程序,所以我们先掌握单独编译各个程序,然后再将各个程序打包,最后将打包程序上传到发布网站上。
在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上安装的过程,基本都是一样的。
问题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
在插件管理中搜索DingTalk然后安装重启即可,配置使用dingtalk提醒构建结果我们在整个过程中体现。
安装好之后需要还需要在系统配置中配置钉钉机器人:
找到钉钉这一项,然后新增:
然后通过申请的钉钉机器人给予的信息添加进去,id暂时不用写,最后点击测试即可(对于申请钉钉机器人不清楚的可以参考这里:https://blog.csdn.net/weixin_39510813/article/details/121168140?spm=1001.2014.3001.5501):
然后在构建配置时就可以选择机器人了,如果你有多个机器人都在系统配置的钉钉配置那里新增即可,目前没有测试过上限是几个。
测试成功类似如下:
注意:安装配置完成之后需要重启一下Jenkins才能生效,否则可能会出现配置了之后发现构建成功与否都没有发送消息到钉钉上。
选择自由项目后确定即可:
点击后面的❓会有帮助,不明白的查看帮助即可:
可以选择定时构建或者GitHub、gitee等有提交时触发构建的教程,可以参考设置提交代码触发构建,这里展示每周一9点构建,这里的时间和crontab的语法是类似的,同样可以查看帮助:
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
构建命令我们仍使用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自动确认即可。
这里我们已发邮件作为示例,实际上我们配置好的钉钉插件也已经发送了钉钉通知,邮件通知有的时候更正式一些:
选择立即构建,构建成功与否的结果会显示出来:
点击对应的构建历史可以查看构建控制台输出:
生成的程序也可以在相关目录找到了。
钉钉上也收到了构建结果:
通过微软的帮助文档,我们了解如何跨文件系统工作,即Windows和Linux命令之间的互操作:https://docs.microsoft.com/zh-cn/windows/wsl/filesystems
这样的话,我们就可以在Windows下调用wsl的Linux命令,从而方便进行交叉编译cgo程序,比如在Windows上写一个脚本启动wsl下的程序构建或者wsl调用windows下的一些命令。
接下来我们将学习使用wsl的Jenkins调用maven编译jar包,之后再将jar包和go程序结果统一打包。