继上次的Jenkins使用简介,现已将Jenkins用在实际项目中,这里介绍下Publish over SSH的使用和服务器用户权限配置。
Publish over SSH插件主要功能是将构建好的应用发布到远程机。用户登录可以使用key或者密码方式,支持添加多个server。不过有一点特殊,只能添加一套密码或key。
猜测作者的思路是想用统一账号用于构建操作,基于这种情况我们为各个服务器创建统一账号,以下基于key方式。
创建key
选一个服务器创建key,步骤如下:
1
2
3
|
ssh-keygen -t rsa
cd .ssh
cat id_rsa.pub >> authorized_keys
|
将私钥和authorized_keys下载下来
id_rsa更名为jenkins_key,后面用于ssh登录。
authorized_keys上传到需要配置的服务器。
创建jenkins用户
以下为我写的创建用户脚本:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#!/bin/sh
## add user
adduser jenkins
# config key
su jenkins
cd /home/jenkins
mkdir .ssh
cd .ssh
wget http://192.168.1.1/authorized_keys
chmod 700 ../.ssh
chmod 600 authorized_keys
# config user
exit
passwd -u -f jenkins
usermod -p -u jenkins
|
2020.12.8 更新脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#!/bin/sh
jenkins_home="/home/jenkins"
# 添加用户
adduser jenkins
# 安装key
sudo -u jenkins mkdir $jenkins_home/.ssh
sudo -u jenkins cp ./authorized_keys $jenkins_home/.ssh
sudo -u jenkins chmod 700 $jenkins_home/.ssh
sudo -u jenkins chmod 600 $jenkins_home/.ssh/authorized_keys
# jenkins 登录设置
passwd -u -f jenkins
usermod -p -u jenkins
# 授权
cp ./extra_sudoer /etc/sudoers.d
|
Jenkins 权限配置文件 extra_sudoer,赋予 root 权限。
1
|
jenkins ALL=(root) NOPASSWD:ALL
|
配置权限
这时jenkins用户已经创建好了,但是这个用户目前还没有什么权限,以PHP项目为例,在构建时需要执行chown
等命令,这时需要对jenkins单独赋予一些权限。
在/etc/sudoers.d/
下创建文件extra_sudoer
1
|
jenkins ALL=(root,nginx) NOPASSWD:/bin/chown, /bin/chmod, /usr/bin/php, /bin/bash
|
以上配置意思是,jenkins用户使用sudo
命令执行chown
等时不需要输入密码。
有一点需注意,使用sudo
切换用户时需加-s
选项,如:
1
|
sudo -u nginx -s php artisan route:clear
|
对于sudoers
配置规则可以参考:sudoers的深入剖析与用户权限控制
以上。