编程崽

登录

一叶在编程苦海沉沦的扁舟之上,我是那只激情自射的崽

Jenkins安装和基本使用

Jenkins安装和基本使用

项目使用Jenkins部署,已经是工作中的常态了,这里来给服务器安装一个Jenkins。

安装Jenkins之前,需要给服务器先安装JDK。

安装

服务器安装linux,可以直接参考 官方教程 中对应的这部分内容,下面是实际安装过程。

官方安装说明

安装之前,需要先确保java的安装正确

jenkins的安装程序只会去/bin:/usr/bin:/sbin:/usr/sbin这几个路径,去寻找java指令,如果没有,那么安装过程会报错,所以安装之前需要先确保一下。

sh 复制代码
# 输入,查询java路径在正确的位置
type -a java

# 输出
java is /usr/bin/java
java is /usr/lib/jdk1.8.0_202/bin/java
java is /usr/lib/jdk1.8.0_202/jre/bin/java

可以看到java指令存放的位置,如果上面要的几个位置中没有,那么就需要做一个软链接,来完成要求:

sh 复制代码
# 做一个软链接,注意 /jdk1.8.0_202/bin/java 需要根据自己的java位置来修改,其实就是上面打印出来的java的位置
ln -s /jdk1.8.0_202/bin/java /usr/bin/java

安装

对于【Debian/Ubuntu】的linux系统,官方安装主要就下面四行命令,依次复制到服务器进行安装即可,至于其他版本的linux。。。我暂时还没有遇到。

sh 复制代码
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -

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

sudo apt-get update

sudo apt-get install jenkins

官方还有一些说明,大意是:

  • 使用 service jenkins 【操作指令】 来操作 jenkins 的启动关闭,具体操作指令,通过查看 /etc/init.d/jenkins 文件,一般包括以下几个命令(start|stop|restart)。
  • /var/log/jenkins/jenkins.log 为 jenkin 的日志
  • /etc/default/jenkins 为配置文件,可以设置端口号,内部 HTTP_PORT=8080 这一行就是端口号配置

原文:

  • 将Jenkins设置为启动时启动的守护进程。查看/etc/init.d/jenkins获取更多细节
  • 创建一个'jenkins'用户来运行此服务
  • 直接将控制台日志输出到文件/var/log/jenkins/jenkins.log。如果您正在解决Jenkins问题,请检查此文件
  • /etc/default/jenkins为启动填充配置参数,例如JENKINS_HOME
  • 将Jenkins设置为在端口8080上进行监听。使用浏览器访问此端口以开始配置
    如果你的/etc/init.d/jenkins文件无法启动Jenkins,编辑/etc/default/jenkins, 修改 ----HTTP_PORT=8080----为----HTTP_PORT=8081---- 在这里,“8081”也可被换为其他可用端口。

执行 service jenkins start 时,可能会报错:

sh 复制代码
service jenkins start

Failed to start jenkins.service: Unit jenkins.service not found.

可通过指令 systemctl list-unit-files --type=service 查找全局服务中,是否有 Jenkins,如果有,那说明安装成功,但系统指令未加载,那就执行以下指令,重载一下系统指令:

sh 复制代码
systemctl daemon-reload

再次执行 service jenkins start ,可能还会报以下错误:

sh 复制代码
service jenkins start

Job for jenkins.service failed because the control process exited with error code.
See "systemctl status jenkins.service" and "journalctl -xe" for details.

启动完成和基本配置

执行完上面的四剧指令后,jenkins安装完成。

打开浏览器,输入我的【服务器ip + 端口号】,打开了jenkins界面,但还是一个大意【请稍等,jenkins正在初始化】的提示。

配置代理(可选)

如果打算直接【服务器ip + 端口号】打开,就不用配置服务器代理了。

后面就需要用浏览器访问 jenkins了,这里建议先配置域名解析,解析一个域名到当前服务器IP很简单,不再说明,但当打开域名时,凡事http访问的域名,进入的都是80端口,可我们服务器中,启动着jenkins服务的端口不同,是不能访问到的。

这时就需要我们在服务器配置一下代理,这里我使用的web服务器的是nginx。

我使用nginx监听了所有请求到当前ip的80端口的请求,所以上面配置了域名解析,当访问时,也会进入到我的nginx中,这时我需要用nginx配置一下反向代理。

nginx的其他配置不贴了,只贴一下代理jenkins项目的配置项,把下面代码贴到nginx配置文件的对应位置,然后重启nginx即可:

sh 复制代码
# jenkins项目 反向代理
server {
  listen 80;
  # 后面是jenkins项目的域名,比如域名是 jenkins.temp.com,那下一行这么写
  server_name jenkins.temp.com;
  access_log  /var/log/nginx/access.jenkins.log; # 输出一下该网站的访问日志,非必须
  location / {
    # 反向代理,我服务器中jenkins服务的端口是8092,就写成下面那样
    proxy_pass http://localhost:8092/;
    proxy_redirect  off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For
    $proxy_add_x_forwarded_for;
  }
}

解析和配置完nginx后,重启nginx,在浏览器输入我们配置的域名,就能看到一个jenkin正在初始化的等待页面。

进入页面

页面初始化完成后,会出现页面,提示你从服务器某个文件中复制 Jenkins 密码,写到页面下面的输入空中,这里直接去服务器取得密码输入继续就行。

再后面,会要求选择安装推荐的插件,还是自定义插件,选择推荐的插件,点击后显示了插件安装进度界面,这里等待安装完成后,会要求创建第一个管理员用户。

创建完第一个管理员用户,会再要求定义当前Jenkins项目的域名,这个域名最好就写成这个jenkins项目即将使用的域名,以后部署项目各种连接服务器,都会进行校验。

写完确认后,就可以进入自己的 Jenkins 页面了。

基本使用

安装插件

  • git相关插件,具体暂不清楚。。。
  • Publish over SSH:登录远程ssh插件,用来让jenkins登录其他服务器,如果jenkins中的任务,只是在安装jenkins的服务器执行一些shell,那就用不到了

配置权限

jenkins是可以直接在当前服务器执行shell,来执行任务的。

但正常情况,jenkins只能控制当前自己的文件夹(工作空间),没有权限进入其他文件夹,这时如果需要进入其他的目标文件夹,只有两种方法:

  • 修改目标文件夹权限,允许jenkins访问。
  • 修改jenkins的用户权限,为其分配新的权限更高的用户组,使其能有权访问。

正常来说,应该使用方案一,但实际我们会犯懒,直接提升jenkins权限。。。下面就提升jenkins为root:

sh 复制代码
# jenkins用户加入到root组
gpasswd -a jenkins root

修改jenkins执行时使用的用户组,要求其使用root,我们需要修改jenkins自己的配置文件。

可能由于安装方式不一样,配置文件也不一样,要么是/etc/default/jenkins,要么是/etc/sysconfig/jenkins,我们可以试一下,哪个文件存在有配置,就是哪个。
我这里的是/etc/default/jenkins文件:

sh 复制代码
# 编辑文件
vim /etc/default/jenkins

# 把以下两行,修改成以下
JENKINS_USER="root"
JENKINS_GROUP="root"

修改完成后,重启jenkins服务,就有权限访问其他文件夹了。

sh 复制代码
service jenkins restart

npm、java等工具找不到

当我们创建了构建流程,点击构建后,如果使用npm、gitbook等我们自己安装在服务器的工具,可能仍然会报错,提示类似:

sh 复制代码
/usr/bin/env: node: No such file or directory

但我们打开服务器,却能发现,node指令完全没问题。。。

原因应该是,jenkins使用这些指令时,只会从/usr/bin/目录下查找有没有,不会全局查找。

这就需要我们自己定义一下软连接,和上面处理JDK的方式一样:

  • 使用type -p {你的指令}查看指令的位置。
  • 使用ln -s {上一行输出的位置} /usr/bin/{你的指令},来创建软连接。

这样,jenkins就可以使用用户安装的指令了。

创建一个简单的构建流程

在 jenkins 首页,点击「新建任务」,进入如下页面。

任务名称可以直接使用汉字,为这个构建起一个名字,然后选择下面列表中的第一项「构建一个自由风格的软件项目」,当然如果有其他需求可以选择其他,但我一般就使用这个就足够了。

Snipaste_2021-03-24_12-19-07.png

之后进入此项目的配置页面,如下图所示:

Snipaste_2021-03-24_13-56-28.png

上图中:

  • A 处可以写一些该项目的描述
  • B 处选择你是否需要使用Git拉取远程仓库的项目,如果不需要就直接无。

但如果需要使用 git,选择Git后,会展开一个新模块,需要你填写远程仓库地址(支持https和ssh两种地址),后面再选择对应的的凭证,这个凭证可以点击「添加」按钮来新增。

且当写完仓库地址、选择凭证后,jenkins 会自动测试一下,检测这个远程仓库使用对个凭证是否可以正常登录,如果不能会有提示,如下图所示,且可以指定拉取的分支。

项目第一次部署时,Jenkins 会创建一个属于这个项目的工作空间,默认位置为:

sh 复制代码
/var/lib/jenkins/workspace/【项目名称】

比如我的这个项目,位置就是:/var/lib/jenkins/workspace/一个测试项目

这里选择使用Git,项目拉取后,就是存放在服务器的这个目录下。

Snipaste_2021-03-24_13-54-39.png

进行完是否使用Git后,我们可以进行后续步骤,后面有一个关键的配置,就是「构建」中的「增加构建步骤」下的「执行 shell」:

Snipaste_2021-03-24_13-56-00.png

之后会出现一个文本框,你可以在这里写一些shell指令,可以使用所有指令,比如复制文件、去其他目录、拉取git、使用node等等:

Snipaste_2021-03-24_14-06-40.png

进行完之后,就可以保存,然后去执行这个构建项目了。