Jenkins的安装和使用

205 阅读6分钟

一、Jenkins安装

安装最低配置:不少于256M内存,不低于1G磁盘,JDK版本>=8(openjdk也可以)。

下载

yum install -y java-1.8.0-openjdk
#安装openjdk,jenkins基于java开发

wget -O /etc/yum.repos.d/jenkins.repo <https://pkg.jenkins.io/redhat/jenkins.repo>
#wget -O 下载文件并以指定的文件名保存

cat /etc/yum.repos.d/jenkins.repo

[jenkins]
name=Jenkins
baseurl=http://pkg.jenkins.io/redhat
gpgcheck=1				#为1时会检测key

rpm --import <https://pkg.jenkins.io/redhat/jenkins.io.key>
#安装jenkins key

yum install -y jenkins

启动

#启动
systemctl start jenkins

#查看进程
ps aux |grep jenkins

#查看jenkins日志,截取部分
less /var/log/jenkins/jenkins.log

Jenkins initial setup is required. An admin user has been created and a password generated
Please use the following password to proceed to installation:
77faa20f2ad544f7bcb6593b1cf1436b				#admin密码,初始化安装时会用到

#admin密码也可以在这里查到
This may also be found at: /var/lib/jenkins/secrets/initialAdminPassword

安装

访问ip:8080进行安装

错误处理

如果界面提示Jenkins正在启动,请稍后...或者提示 Please wait while Jenkins is getting ready to work...

  • 解决方法:
需要你进入jenkins的工作目录
cd  /var/lib/jenkins
打开 hudson.model.UpdateCenter.xml 把 <http://updates.jenkins-ci.org/update-center.json> 改成
<http://mirror.xmission.com/jenkins/updates/update-center.json>
 

二、插件安装

插件网站:
plugins.jenkins.io/

cd {你的Jenkins工作目录}/updates  #进入更新配置位置

vim default.json
#进入vim先输入:然后再粘贴上边的:后边的命令,注意不要写两个冒号!
:1,$s/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g
:1,$s/http:\/\/www.google.com/https:\/\/www.baidu.com/g

或者
sudo  sed -i 's#<http://updates.jenkins-ci.org/download#https://mirrors.tuna.tsinghua.edu.cn/jenkins#g>' default.json && sed -i 's#<http://www.google.com#https://www.baidu.com#g>' default.json

常用插件:

  • Multiple SCMs plugin 多项目
  • Git Parameter 的参数化
  • Build With Parameters 输入框式的参数
  • Persistent Parameter 下拉框式的参数
  • Publish over SSH 远程操作服务器

三、常用命令

/etc/init.d/jenkins restart

查看jenkins状态
systemctl start jenkins 启动jenkins
systemctl enable jenkins 设置jenkins开机启动
systemctl stop jenkinse 关闭jenkins
systemctl status jenkins 查看jenkins的状态


查看jenkins相关文件路径
[root@localhost jenkins]# rpm -ql jenkins
/etc/init.d/jenkins
/etc/logrotate.d/jenkins
/etc/sysconfig/jenkins
/usr/lib/jenkins
/usr/lib/jenkins/jenkins.war
/usr/sbin/rcjenkins
/var/cache/jenkins
/var/lib/jenkins
/var/log/jenkins

修改jenkins文件夹权限
chown -R jenkins.jenkins tomcat

查看jenkins端口号
cat /etc/sysconfig/jenkins

修改jenkins端口号
vi /etc/sysconfig/jenkins

查看第一次登录的密码
cat /var/lib/jenkins/secrets/initialAdminPassword

四、修改默认端口

jenkins默认端口为8080 如果要更改jenkins默认端口,需要更改两处设置:

1. 服务器修改

jenkins主配置文件 /etc/sysconfig/jenkins

(该文件重要性类似于mysql的 /etc/my.cnf, tomcat 的 server.xml, nginx的 nginx.conf)

vim /etc/sysconfig/jenkins 

默认:

更改为: JENKINS_PORT="9090"

然后重启

jenkins systemctl restart jenkins

2. 应用内修改

jenkins前端界面之 系统管理--->系统设置 系统管理--->系统设置--->管理监控配置--->JenKins Location

3. 扩展:

如果 前后端配置的端口不一致

则 通过 jenkins web前端界面 进入 系统管理会报如下错误: 反向代理设置有误, 如图:

五、部署

一、从Git上拉取代码

拉取代码的默认目录:

/var/lib/jenkins/workspace

打包:

pwd
tar -zcvf blog_test.tar.gz *
tar -zxvf /var/lib/jenkins/workspace/blog_test/blog_test.tar.gz -C /www/wwwroot/blog_test
cd /var/lib/jenkins/workspace/blog_test
rm -rf ./*

使用SSH拉取代码

我们一般用http的形式拉取代码。 ssh的好处就是不用每次输入密码,而且貌似会快丢丢,不知道是不是错觉。

大概需要三个步骤:

一、本地生成密钥对;

二、设置github上的公钥;

三、修改git的remote url为git协议。

1.生成密钥对。

SSH 公钥默认储存在账户的主目录下的 ~/.ssh 目录。进去看看:

$ cd ~/.ssh
$ ls
authorized_keys2  id_dsa       known_hosts config            id_dsa.pub

执行下:

[root@iZbp16x1iba3qb7a1cuu20Z bin]# ssh-keygen -t rsa -C "lixin"
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:xtPk6o3L...CfcOK7UCo lixin
The key's randomart image is:
+---[RSA 2048]----+
|     ..o   ..o . |
|      . o   o.+  |
|       o  . ++.  |
|      +.o+ ..=.. |
|     . ++o.o o  |
|      ..=o+o .   |
|     o oE=o .    |
|    . ooo=+. .   |
|   .oo.o*oo=o    |
+----[SHA256]-----+

2.添加公钥到你的git帐户

[root@iZbp16x1iba3qb7a1cuu20Z bin]# cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAA...HqATKQ7MQPkuBDU1+sdUEv7 lixin

直接粘贴进去就好了

3.修改你本地的ssh remote url. 不用https协议,改用git 协议

可以用git remote -v 查看你当前的remote url

$ git remote -v
origin <https://github.com/test1/test1.git> (fetch)
origin <https://github.com/test1/test1.git> (push)

使用 git remote set-url 来调整你的url。

git remote set-url origin git@github.com:test1/test1.git

完了之后,你便可以再用 git remote -v 查看一下。

然后,设置到Jenkins

测试一下:

/usr/bin/git ls-remote -h  git地址

查看私钥

[root@iZbp16x1iba3qb7a1cuu20Z bin]# cat ~/.ssh/id_rsa
 -----BEGIN RSA PRIVATE KEY-----
 MIIEpAIBAAKCAQEAzNZXYdsjoPIPUhOyFaco/HDZ9kAXeQgwf/X9apZVB7NsMBKk
 ...
 ...
 ...
 TbIuzX1zvSud4AB+RslD2TB0Tn2Ck2lCBAN61ted1jc2ZIPMVk9HLA==
 -----END RSA PRIVATE KEY-----

把私钥填进去就好了

二、编译、打包

[ -e back-wiki.tar ] && rm -f back-wiki.tar
tar cf back-wiki.tar back-wiki/*
sudo mv back-wiki.tar /home/

cd /home/
[ -e back-wiki.bak ] && sudo rm -rf back-wiki.bak
sudo mv back-wiki back-wiki.bak
sudo tar xf back-wiki.tar
[ -e back-wiki.bak/node_modules ] && sudo mv  back-wiki.bak/node_modules back-wiki/

cd /home/back-wiki
if [ "$add_module" = "true" ];
then
	sudo gitbook install
fi

sudo gitbook build

三、部署

linux服务器使用ssh实现免密登陆

需求:Jenkins部署的时候需要登陆到部署机执行shell脚本,然后采用ssh免密登陆。

具体步骤

(1)、客户端首先向服务器发送要对其进行身份验证的密钥对的用户名。
(2)、服务器检查客户端尝试登录用户帐户的下authorized_keys文件。
(3)、如果在文件中找到具有匹配公钥,则服务器生成随机数并使用公钥加密该随机数。并该加密消息发送给客户端。
(4)、如果客户端利用自己的私钥解密消息(如果可以的话),从而显示原始数。
(5)、客户端将解密的原始数和用于加密通信的共享会话密钥组合,计算他们的哈希值。客户端将该哈希值发回服务器,作为回应。
(6)、服务器使用相同的共享会话密钥和此前(步骤4)发送给客户端的原始编号来自行计算哈希值。将计算结果和客户端发回的哈希值对比。如果这两个值匹配,则证明客户端拥有私钥并且客户端已经过身份验证。

操作流程

客户端创建公钥私钥,然后将公钥放到被登陆机的指定目录下。

比如:
我的仓库服务器是A,用来拉代码和编译,需要登陆到执行服务器B。

  1. 服务器A生成公钥私钥
ssh-keygen -t rsa
//rsa可以省略,因为是默认值

执行后会生成两个文件:id_rsa、id_rsa.pub文件,前者是私钥,后者是公钥。

  1. 将id_rsa.pub文件复制到服务器B的指定目录
目录:/root/.ssh/
文件名:authorized_keys
方法1:
ssh-copy-id -i ~/.ssh/id_rsa.pub root@主机IP

方法2:

1) 在服务器A上创建authorized_keys文件并将公钥追加到该文件。
cd /root/.ssh
cat id_rsa.pub >> authorized_keys
chmod 600 authorized_keys
//修改文件权限为600,该文件有规定如果属组其他人出现可写则文件就不会生效

2) 在服务器A指定用户家目录下创建 .ssh 目录(这里在root用户下创建,因为要使用密钥登陆到root用户)
mkdir .ssh
chmod 700 .ssh
//将目录权限改为700该目录的权限必须是700才有效

3) 将登录机创建的authorized_keys文件拷贝到被登录机,使用scp(自己下载了再传上去也行,注意文件权限即可)
scp authorized_keys root@服务器地址:/root/.ssh/

应用到Jenkins

安装插件:Publish over SSH

在配置中找到位置,填上私钥。(就是服务器A /root/.ssh/ 下生成的那个)

然后填上服务器的IP(hostname)、登录用户名即可测试。

执行代码

拷贝到目标机器

sudo scp api root@10.28.28.123:/home/deploy/api

执行脚本(根据自己的情况写)

cd /home/deploy

if [ "$build_api" = "true" ];
then

   cd /home/www/go-api

   rm -rf ./api.bak
   mv api  api.bak

   mv /home/deploy/api  /home/www/go-api/api

   chmod 777 ./api

	supervisorctl restart go_api
fi