Jenkins是大名鼎鼎开源的CI软件,有非常多的插件,可以完成自动化部署,构建等功能。最近发现前端工程师,在每次的发布流程都非常的折磨人,于是想着不然自己搭建一个CI来处理。

CI的好处是显而易见的,可以持续集成和持续交付。我在之前做国外的项目的时候,这种便利,让我只需要关注我自己的代码和逻辑即可。代码编写出错,CI就过不去。代码通过后,QA就可以直接拿到APK包直接测试,完全不用我本地手动出包。节省了两边的时间。

按照一般Android的流程来看,本地写完代码—Push代码—提交PR—通过审核—打APK包—QA测试。有CI介入之后,相当于打APK包的操作就交由Jenkins来完成了。每一次的Push都可以对应一个APK包,QA只需要在当前的APK中测试是否问题已经解决。

现在这位前端同事使用的是Vue的框架。他的本地流程是本地写完代码—Push代码—到服务器Pull代码—打包—上线测试。每次看到他一遍又一遍的处理这些重复的操作,我就觉得不舒服,完完全全有更加简便和悠闲的办法。用了CI之后,他只需要写完代码Push到指定的分支即可。

安装JAVA

Linux下安装JAVA,相对于Windows来说,方便不少。可以直接采用源的方式安装,基础的JDK环境都会配置好的。下面以安装Openjdk为例:

  • CentOS下可以通过yum -y install java-1.8.0-openjdk-devel.x8664,这里需要注意的是JDK对应的是-devel,不带这个的为JRE
  • Ubuntu下通过apt-get install openjdk-8-jdk

安装完成后java -version可以查看。默认的安装路径会在/usr/lib/jvm中找到。

安装运行Jenkins

CentOS

CentOS中可以先添加一个yum的repos

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

然后执行yum install -y jenkins

Ubuntu

先添加repos key到系统当中

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

当key添加成功后,我们追加Debian的repos到sources.list当中


> echo deb https://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list

先执行一遍apt-get update,之后执行apt-get install jenkins即可。

启动参数

在启动之前,可以做一下配置的修改:

  • 默认Jenkins使用的是8080端口,可能会和自己的某些服务有冲突
  • 默认Jenkins会调用jenkins的用户来操作,这会让一些脚本没有权限,可以修改为root

打开/etc/sysconfig/jenkins这个配置,修改上面两个参数

执行service jenkins start即可启动jenkins

首次登录的时候,需要输入/var/lib/jenkins/secrets/initialAdminPassword中的密码。输入无误后,就可以选择「Install suggested plugins」。

安装完成后可以通过http://localhost:8181(端口以你自己修改的为准)直接访问了。

Nginx反向代理

现在Jenkins是运行在本地的端口上,我们是想要它运行在云主机的某个指定端口。所以需要做Nginx的反向代理。

按照下方的代码,修改Nginx的conf,并通过nginx -s reload重新载入配置即可。

server {
	listen       81;
	server_name  localhost;

        location / {
		proxy_pass http://127.0.0.1:8181;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
}

至此,我们可以直接通过云主机IP:端口,在互联网上访问Jenkins啦。

配置Jenkins(Gitlab/Gitee)

配置Jenkins的项目,由于我们的代码是托管在Gitee上的,所以需要采用Gitee Jenkins Plugin插件来配置。

里面按照他给的流程来操作,都不是很难。需要注意的坑是获取码云APIV5的私人令牌的过程,这个令牌可以在这里获取。在创建好私人令牌确定好权限之后,页面会自动刷新,会展示一串字符,即为私人令牌。切忌此处不要手动刷新,因为你只有这一个途径看到这个私人令牌。如果实在错过,那就重新申请一个令牌,当前这个会自动作废。

设置完成后,为新的项目增加上Gitee的WebHook,这样,每次Push代码的时候,就会自动运行Jenkins的构建了。

另外如果在构建成功的之后,还需要做一些处理,例如将打好的包移动到某个web目录等等。可以在Jenkins的项目配置中,增加构建步骤即可。

Jenkins还有很多强大的功能,我都还没有使用,继续摸索。