Setup Jenkins Slave on Raspberry Pi

经常需要编译一些基于ARM架构的程序,但是这些程序过一段时间就会升级,因此需要重新编译,然后把二进制程序打包,并且发布到Github上,供大家下载安装。

整个流程虽然简单,但是涉及到很多手动操作,非常繁琐。如果能够自动执行就完美了。在网上找到很多解决方案,其中使用Jenkins比较可行。

Jenkins是用Java写的巨无霸软件,对硬件要求极高。直接在树莓派上运行会很卡,所以只能使用Master-Slave的方式来运行,在PC上运行Master节点,在PI上运行Slave节点。在PC上使用Docker来运行Jenkins比较方便,在PI上只需要有Java环境即可。

Master Setup

jenkins:  
  image: jenkinsci/jenkins
  ports:
    - "8080:8080"
    - "50000:50000"
  volumes:
    - ./data:/var/jenkins_home
  restart: always
$ mkdir data
$ chown 1000 data
$ docker-compose up -d
$ docker-compose exec jenkins bash
>>> cat ~/secrets/initialAdminPassword
******
>>> ssh-keygen
>>> cat ~/.ssh/id_rsa.pub
......
>>> exit

打开网址:http://jenkins-master:8080,并且安装下列插件:

  • Git plugin
  • SSH Slaves plugin

Slave Setup

$ sudo apt install git openjdk-8-jdk
$ sudo adduser jenkins
$ su -l jenkins
$ ssh-keygen
$ cat >> ~/.ssh/authorized_keys
......

Master与Slave成功建立连接后,会在Slave上自动生成slave.jar文件。

Master <-> Slave

点击Manage Jenkins > Manage Nodes > New Node添加节点,并且为它设置arm标签。另外,Master可以使用SSH Username with private key (From the Jenkins master ~/.ssh)与Slave进行通讯。

最后,在Jenkins中创建一个New Item,限制在有arm标签的机器执行,点击Build Now手动触发,并且查看运行日志。确保一切正常后,一个崭新的树莓派Slave就成功搭建好了。