前言
最近发现jenkins的用处蛮大的,可以帮助我很好得管理整个开发部署环境。所以,在我本机装一个。
下载
我是在官网直接下载的最新版。因为之前折腾的时候好像遇到了写麻烦,所以,感觉直接用war包是最靠谱的。这次我也就直接下了war包的版本。公司现在一直以来用的感觉,还是蛮好用的,而且升级也蛮简单的。
启动和开机启动
nohup java -jar jenkins.war --httpPort=8080 &
然后你就启动成功了。然后我们配置开机启动。
vim /lib/systemd/system/jenkins.service
[Unit]
Description=jenkins
After=network.target
[Service]
Type=forking
ExecStart=/opt/jdk-11/bin/java -jar /opt/jenkins/jenkins.war --httpPort=8080 &
PrivateTmp=true
TimeoutSec=0
[Install]
WantedBy=multi-user.target
经测试,直接启动war包或者用nohup进行启动都没有问题。但是,直接写到开机启动脚本死活不返回,就是一直同步卡在那里。ctrl+c之后,又是正常的,不会停止进程。但是,开机启动服务不能这样呀。官网似乎也没有别的centos的安装方法。所以,我决定,套tomcat。
- 我下了Tomcat9
- 由于我用的是openjdk11,当初脑子抽风配置了JRE_HOME。于是tomcat启动跟我说启动失败。删除这个环境变量即可。
- 删除webapp里所有的目录,把jenkins.war重命名为ROOT.war,这样的话启动tomcat后就不用带二级目录了。
- 在catalina.sh中加入JAVA_HOME,酱紫才可以开机启动。
- ExecStart改为/opt/jenkins/apache-tomcat-9.0.30/bin/startup.sh
问题
理论上来说这样就可以了,但是,报错了,
Caused: hudson.util.AWTProblem
yum install fontconfig 然后就成功了
初始化
第一次启动建议还是同步启动,日志里面会有初始化的用户名密码,和这个存放的位置:
/root/.jenkins/secrets/initialAdminPassword
剩下的,跟着向导走就可以了。不过呢,由于插件下载得很慢,而且反正后边也能装,所以建议开始什么插件都不装,后面再装。这是一个过来人的劝解。
使用
这次折腾jenkins实际上是想去摸下其中任务的逻辑和可操作性的一些尝试。但是吧,凭空摸,太泛泛了,不好用,所以自己设计了些小例子。插件老安装不上,只能去http://updates.jenkins-ci.org/download/plugins/ 自己手动下载手动安装
拉取源码
依赖于Git插件和git-parameter插件。
新建一个自由风格的软件项目,然后勾选参数化构建过程。因为我们安装了git-parameter,所以这里可以选择GitParameter,我们就可以选择Branch类型的参数,默认值我设置的是origin/master。下面我们在源码管理里面勾选Git,配置仓库地址,添加对应的credentials,分支指定为刚才配置的变量。就配置完成了。
保存后进入任务,会看见build with parameter,然后就能选择分支进行构建了。构建的目录为默认的工作空间目录,在~/.jenkins/workspace。
打包
我的项目都是使用maven进行打包的,所以首先需要安装maven。
安装maven
maven的安装很简单。首先在官网下载二进制包。然后我是解压在/opt/maven目录的,仓库存储在/home/maven_repository下面。然后要配置环境变量。
export MAVEN_HOME=/opt/maven
export PATH=$MAVEN_HOME/bin:$PATH
setting.xml文件里的变动包括,仓库位置和私服的配置。具体就不说了,仓库位置就一行代码。私服配置,我用的是阿里云的私服,把它提供的配置考进去就行了。
打包任务
这个任务我是这么设计的。首先,我需要找到源码在哪里。而这个源码,我希望是之前源码拉取的。但是,如果我在源码拉取的目录直接进行编译,总觉得就会很难管理源码了,所以我还需要把源码拷贝到对应的目录再进行编译,编译后再将结果拷贝到指定的目录。
调用拉取代码任务
设定传入参数调用任务需要安装Parameterized Trigger插件。安装了这个插件后,你在添加步骤的时候就能够看到相关的选项,然后根据选项进行操作即可,很简单。因为后来我发现这里不用调用拉去源代码的任务,因为拉取源代码本身就不是一个步骤,所以就没用了。
执行脚本
在拉取源代码后,我执行了这样的脚本:
export JAVA_HOME=/opt/jdk-11
cd ./${module}
pwd
/opt/maven/bin/mvn package -Dmaven.test.skip=true
cp ./target/${module}.jar /home/package
这里有这样几个注意事项:
- 在脚本中,我们是无法使用环境变量的。所以,我在开头的时候声明了相关的变量,因为后面maven的脚本中要使用。
2.module是我在入参中设置的一个选项参数,方便我选择打包哪个模块。
3.可以看到这里都是相对路径的操作,除了最后复制jar包的目的地。因为工作空间是可能改变的,所以这里就直接使用相对路径。(注:任务的工作空间是可以设置的,在general中点高级就可以看到)
推送
之前公司在推送的时候,都是配置ssh,然后使用shell脚本进行推送的。对于这个过程,我总是记不住,而且感觉很烦。这次查到有个叫做publish over ssh的插件,试试吧。
配置
在“系统管理->系统设置”中,找到Publish Over SSH,在Passphrase中填写上面提到的内容。Path to key和Key填一个就行,Key的优先级要高一些。我选择填Key,就把刚才生成的私钥文件/root/.ssh/id_rsa中的内容粘贴进来即可。
然后添加服务器:
- Name: 用于记忆的名称
- Hostname: 机器名或者ip,就是找到这台机器的地址,我用的是ip
- Username: 用户名,用来登录的用户名
- Remote Directory: 拷贝文件的目录
这些都配置好了,在下面可以找到一个“高级”,点击后,出现“Use password authentication, or use a different key”的选项,然后在Passphrase / Password的选项,输入上面的用户登录密码就好了。能配登录密码,那ssh秘钥我就不配了。
使用
这个时候,构建的时候会有“Send files or execute commands over SSH”选项。选择刚才配置的SSH Server。接下来是一些基本的内容:
- Source files: 这里填写的是相对于该任务的workspace的相对路径,我试过绝对路径,是无效的。这里既可以写文件夹,也可以写文件,也可以使用通配符*,还是很好用的。
- Remvoe prefix: 由于拷贝的时候会按照原本填写的相对目录的路径进行拷贝,所以这里可以配置需要去除路径的前面的哪些。
- Remote directory:注意这里配置的也是一个相对路径。因为你在SSH Server中已经配置改过一个路径了,这里就是一个相对那个路径的相对路径啦。(注意,不用预先创建目录,拷贝过去会自动创建的。)
- Exec command:拷贝完后执行的shell。因为这里可以执行shell,只要我不配置文件拷贝,其实就变成了一个纯执行shell的任务了。还是蛮方便的。