一,前沿
Jenkins是什么?
Jenkins是一个开源的支持自动化构建,部署等任务的平台。基本上可以说是持续集成(CI),持续发布(CD)不可缺的工具。Jenkins的官方地址本篇环境信息
工具/环境 版本 Linux Server CentOS 7 Jenkins 2.121.2 JDK 1.8.0_181 准备工作
安装jdk,安装maven二,安装Jenkins
yum源的安装
yum源导入
1
2
3
4#添加Yum源
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安装
1
sudo yum install -y jenkins
开放端口
Jenkins站点的默认监听端口是80801
2sudo firewall-cmd --add-port=8080/tcp --permanent
sudo firewall-cmd --reload配置Java可选路径
因为Jenkins默认的java可选路径不包含我们部署的jdk路径,所以这里要配置一下,不然Jenkins服务会启动失败1
2
3
4
5
6
7
8
9
10
11#修改jenkins启动脚本
sudo vi /etc/init.d/jenkins
#修改candidates增加java可选路径:/usr/java/jdk1.8.0_181/bin/java
candidates="
/etc/alternatives/java
/usr/lib/jvm/java-1.8.0/bin/java
/usr/lib/jvm/jre-1.8.0/bin/java
/usr/lib/jvm/java-1.7.0/bin/java
/usr/lib/jvm/jre-1.7.0/bin/java
/usr/bin/java
/usr/java/jdk1.8.0_181/bin/java启动Jenkins并设置Jenkins开机启动
1
2
3
4
5
6
7#重载服务(由于前面修改了Jenkins启动脚本)
sudo systemctl daemon-reload
#启动Jenkins服务
sudo systemctl start jenkins
#将Jenkins服务设置为开机启动
#由于Jenkins不是Native Service,所以需要用chkconfig命令而不是systemctl命令
sudo /sbin/chkconfig jenkins on浏览器输入 http://
:8080 访问Jenkins 三,Jenkins初始化
解锁Jenkins
查询root账号默认密码1
cat /var/lib/jenkins/secrets/initialAdminPassword
选择插件
可以选择安装推荐的插件,也可以选择自定义的插件安装,其中这里我选择了第二种。
添加管理员
配置Jenkins URL
如果由域名的话可以填入域名,之后也可以修改;在系统管理=>系统设置 Jenkins Location中设置
开始使用Jenkins
配置完Jenkins URL之后就完成了整个Jenkins配置引导
点击“开始使用Jenkins”就会进入Jenkins主页
四,Jenkins与git SSH配置
首先在jenkins服务器上安装相对应的git工具
1
yum -y install git
安装好git服务器,可以用gogs,GitLab或者直接使用github,gitee等仓库
在Jenkins服务器配置相对应的.ssh目录下配置config
1
2
3
4
5Host git.***.com(你设置的jenkins能访问到的git域名)
HostName git.***.com
Port 10022(开放的git服务ssh端口)
IdentityFile ~/.ssh/id_rsa(设置的公钥与私钥对应)
IdentitiesOnly yes在git服务上进行相对应的ssh配置将jenkins生成的id_rsa.pub文件
这样配置你的jenkins服务器上应该能够clone相关的代码。如果jenkins服务与git服务放在一台服务上jenkins的web服务应该能拉取相关的代码,如果2台分开部署如何配置呢?
在jenkins的安装目录下进行ssh配置在/var/lib/jenkins创建相关的.ssh文件,设置相关的config以及私钥
在jenkins的web页面进行相关的配置将相对应的配置创建相关的密钥对应
五,Jenkins中JAVA,MAVEN配置
- 在jenkins服务器中安装相对应的JAVA环境,然后再系统管理中全局环境变量设置相对应的JAVA_HOME的环境
- maven配置,安装相关的maven插件Pipeline Maven Integration,配置相关的.m2文件
六,在Jenkins中配置nodejs
在centos中安装nodejs
新建目录/opt/mnt
选择你相应的版本官网下载对应的版本
下载nodejs
1
wget https://nodejs.org/download/release/v8.12.0/node-v8.12.0-linux-x64.tar.gz
解压
1
tar -zxcf -C node-v8.12.0-linux-x64.tar.gz
进入解压目录下的bin目录,执行ls命令
1
2mv node-v8.12.0-linux-x64 node
cd node/bin && ls
有node和npm
测试
1
./node -v
显示版本号即代表成功
现在
node
和npm
还不能全局使用,做个链接1
2ln -s /opt/mnt/node/bin/node /usr/local/bin/node
ln -s /opt/mnt/node/bin/npm /usr/local/bin/npm
至此node就安装成功了
jenkins中配置nodejs
全局安装相应的angular的框架
1
npm install -g @angular/cli@7.3.9
修改npm的淘宝镜像,在/var/lib/jenkins的目录下创建相关
1
2
3
4
5sudo su -s /bin/bash jenkins #登录jenkins
cd /var/lib/jenkins
touch .npmrc
vi .npmrc
registry=https://registry.npm.taobao.org/
七,jenkins修改用户运行
解决登录jenkins的问题,由于jenkins在运行时可以选择用户进行运行;
打开Jenkins配置文件
1
vim /etc/sysconfig/jenkins
找到如下行:
将原来的Jenkins用户修改为root用户:
1
$JENKINS_USER="root"
修改Jenkins相关文件夹用户权限
更改jenkins三个文件夹的用户所属用户组:
1
2
3chown -R root:root /var/lib/jenkins jenkins的home目录
chown -R root:root /var/cache/jenkins jenkins的缓存目录
chown -R root:root /var/log/jenkins jenkins的日志目录重启jenkins
重启jenkins服务并检查运行Jenkins的用户是否已经切换为root
1
2systemctl restart jenkins
ps -ef | grep jenkins若显示为root用户,则表示修改完成
八,报错解决
jenkins登录不了Harbor问题
错误内容:
1
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.34/version: dial unix /var/run/docker.sock: connect: permission denied
解决方案:
关闭虚拟机的selinux(可能有用)。参考查看 SELinux状态及关闭SELinux
在虚拟机中修改
/var/run/docker.sock
的权限。(很危险!!!)(不推荐)终极解决方案:
错误原因是,在push之前,需要使用docker login命令完成登录
但是Jenkins job的命令是以伪用户jenkins的名义执行的,因此无法直接在jenkins账户完成登录,那么如何解决呢?
使用root账户完成登录
将/root/目录下的.docker目录复制到/var/lib/jenkins jenkins的家目录
修改文件夹权限chown -R jenkins:jenkins .docker
原理是:登录成功后会在.docker中生成一个config.json文件,里面保存了认证的信息,以后每次执行docker pull/push时,都会通过检测该文件确定用户是否已完成认证。
切换jenkins用户登录
1
sudo su -s /bin/bash jenkins
解决jenkins拉取不了私服代码的问题
参考Jenkins在git SSH配置
Jenkins远程连接linux
由于配置原因造成一下错误
错误:jenkins.plugins.publish_over.BapPublisherException: Failed to connect session for config [131]. Message [Auth fail]
配置方法:
生成密钥
在我的jenkins服务器上/var/lib/jenkins用户目录下
1
2
3
4ssh-keygen # 密钥生成路径直接默认回车
cd .ssh
cat id_rsa.pub >> authorized_keys # 将公钥拷贝到authorized_keys文件
scp authorized_keys user@ip:/root/.ssh #将生成的authorized_keys拷贝到要连接的linux机器上的对应用户下的.ssh文件夹下配置SSH server 系统管理->系统设置
点击测试
九,总结
至此yum源安装的jenkins就完毕了,之后会陆续推出相关的docker中安装jenkins,在k8s中使用jenkins的master/salves模式