- 官方文档:www.jenkins.io/zh/
一、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。
- 服务器A生成公钥私钥
ssh-keygen -t rsa
//rsa可以省略,因为是默认值
执行后会生成两个文件:id_rsa、id_rsa.pub文件,前者是私钥,后者是公钥。
- 将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