0%

Jenkins初始化及常见问题整理

[TOC]

错误异常处理

1. Failed to connect to repository : Error performing command: git ls-remote -h

产生原因:

Jenkins服务器没有安装git

解决方式:

1. Jenkins服务器上查看git是否已安装及安装位置

1
2
3
4
5
6
7
[root@ci ~]# git version
-bash: git: command not found
[root@ci ~]# yum install git -y
Complete!

[root@ci ~]# whereis git
git: /usr/bin/git

2. 打开Jenkins的 主页面 > 系统管理 > Global Tool Configuration

配置下git 的path

2. stdout: stderr: Host key verification failed. fatal: Could not read from remote repository.Please make sure you have the correct access rights and the repository exists.

产生原因:

代码仓库没有添加允许jenkins服务器用户拉取代

解决方式:

创建秘钥可以参考第三个错误的解决步骤

  • 检查jenkins服务器ssh key

    1
    2
    3
    4
    5
    [jenkins@ci ~]# cd .ssh
    [jenkins@ci ~]# ll
    total 8
    -rw-------. 1 root root 1675 Jun 19 11:06 id_rsa
    -rw-r--r--. 1 root root 389 Jun 19 11:06 id_rsa.pub

    如果没有文件,则使用下面命令进行创建

    1
    2
    3
    4
    [jenkins@ci ~]$ssh-keygen
    Generating public/private rsa key pair.
    Enter file in which to save the key (/var/lib/jenkins/.ssh/id_rsa):
    // 一路回车即可
  • 在代码仓库添加jenkins服务器用户的公钥

  • 在jenkins管理端创建全局凭证并使用

    • 创建全局凭证

    • 使用全局凭证

3. Load key “/var/lib/jenkins/.ssh/id_rsa”: Permission denied

参考1

这里需要对Jenkins密钥进行配置

3-1 切换jenkins用户不成功

jenkins系统本身有bug的,下面切换用户会失败

1
su jenkins

解决办法如下:

/etc/passwd文件中的/bin/bash被yum安装的时候变成了/bin/false

然后我执行cat /etc/passwd命令,果然被改成了/bin/false

cat /etc/passwd

接着执行sudo vim /etc/passwd命令,把false改为bash

sudo vim /etc/passwd

改完后使用 grep jenkins /etc/passwd 查看下是否成功

1
jenkins:x:997:995:Jenkins Automation Server:/var/lib/jenkins:/bin/bash

3-2 su jenkins bash-4.2问题

当我们切换到jenkins用户后,命令提示符的用户名不是jenkins而变成了
-bash-4.2#

网上一查,原因是在安装jenkins时,jenkins只是创建了jenkins用户,并没有为其创建home目录。所以系统就不会在创建用户的时候,自动拷贝/etc/skel目录下的用户环境变量文件到用户家目录,也就导致这些文件不存在,出现-bash-4.2#的问题了
以下命令是在切换到jenkins用户下执行的!(只是用户现在显示的是-bash-4.2)

这个时候呢,参考网上的做法我执行下面步骤:

  1. vim ~/.bash_profile
    执行上面的命令,即使没有.bash_profile文件,linux会自动创建。

  2. 然后再添加这句

    export PS1='[\u@\h \W]\$'

  3. 我们最后再刷新.bash_profile文件,使其起作用

    source ~/.bash_profile

3-2 su jenkins bash-4.2再解决

参考

在上面操作后,我使用su jenkins 还是会有bash-4.2界面,只需把命令变为su - jenkins可以解决,同事给了一个其他的方法

​ 将/etc/skel/目录下 .bashrc和 .bash_profile 文件拷贝到用户的家目录下,然后对复制过去的文件授予该用户、用户组权限。

1
2
3
4
cp /etc/skel/.bashrc /var/lib/jenkins/
cp /etc/skel/.bash_profile /var/lib/jenkins/
chown jenkins.jenkins /var/lib/jenkins/.bashrc
chown jenkins.jenkins /var/lib/jenkins/.bash_profile

​ 然后退出重新登录,就恢复正常了。

/etc/skel/目录作用:

​ 用来存放新用户环境变量文件,添加新用户时,将该目录下文件拷贝到新用户家目录中。

​ 默认情况下该目录下都是隐藏文件(以.点开头的文件);

​ 通过修改、添加、删除该目录下的文件,可为新添加的用户提供统一的、标准的、初始化用户环境。

####3-3 su jenkins 需要输密码

上面我们解决了bash-4.2,下次从root切换jenkins用户的时候,发现需要输入密码,下面解决下这个错误

1
vi /etc/sudoers

添加jenkins ALL=(ALL) NOPASSWD: ALL

然后执行/etc/init.d/jenkins restart

3-4 Jenkins密钥配置

su - jenkins切换到jenkins用户后,使用下面命令生成秘钥

1
2
3
4
[jenkins@ci ~]$ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/var/lib/jenkins/.ssh/id_rsa):
// 一路回车即可

生成后,

  1. 把公钥添加到代码管理工具gitlab或者其他平台,使得jenkins用户有权限拉取代码
  2. 把公钥添加到需要发布代码的服务器,使得jenkins所在服务器有权限进行scp 或 ssh操作