一,前沿

  1. Jenkins是什么?
    Jenkins是一个开源的支持自动化构建,部署等任务的平台。基本上可以说是持续集成(CI),持续发布(CD)不可缺的工具。Jenkins的官方地址

  2. 本篇环境信息

    工具/环境 版本
    Linux Server CentOS 7
    Jenkins 2.121.2
    JDK 1.8.0_181
  3. 准备工作
    安装jdk,安装maven

    二,安装Jenkins

  4. 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
  5. 开放端口
    Jenkins站点的默认监听端口是8080

    1
    2
    sudo firewall-cmd --add-port=8080/tcp --permanent
    sudo firewall-cmd --reload
  6. 配置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
  7. 启动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初始化

  8. 解锁Jenkins
    查询root账号默认密码

    1
    cat /var/lib/jenkins/secrets/initialAdminPassword

    jenkins初始化

  9. 选择插件
    jenkins选择插件
    可以选择安装推荐的插件,也可以选择自定义的插件安装,其中这里我选择了第二种。
    jenkins初始化安装插件

  10. 添加管理员
    创建用户

  11. 配置Jenkins URL
    如果由域名的话可以填入域名,之后也可以修改;在系统管理=>系统设置 Jenkins Location中设置
    配置URL

  12. 开始使用Jenkins
    配置完Jenkins URL之后就完成了整个Jenkins配置引导
    开始Jenkins

  13. 点击“开始使用Jenkins”就会进入Jenkins主页
    Jenkins的主页

四,Jenkins与git SSH配置

  1. 首先在jenkins服务器上安装相对应的git工具

    1
    yum -y install git
  2. 安装好git服务器,可以用gogs,GitLab或者直接使用github,gitee等仓库

  3. 在Jenkins服务器配置相对应的.ssh目录下配置config

    1
    2
    3
    4
    5
    Host git.***.com(你设置的jenkins能访问到的git域名)
    HostName git.***.com
    Port 10022(开放的git服务ssh端口)
    IdentityFile ~/.ssh/id_rsa(设置的公钥与私钥对应)
    IdentitiesOnly yes

    在git服务上进行相对应的ssh配置将jenkins生成的id_rsa.pub文件

  4. 这样配置你的jenkins服务器上应该能够clone相关的代码。如果jenkins服务与git服务放在一台服务上jenkins的web服务应该能拉取相关的代码,如果2台分开部署如何配置呢?

  5. 在jenkins的安装目录下进行ssh配置在/var/lib/jenkins创建相关的.ssh文件,设置相关的config以及私钥

  6. 在jenkins的web页面进行相关的配置将相对应的配置创建相关的密钥对应

五,Jenkins中JAVA,MAVEN配置

  1. 在jenkins服务器中安装相对应的JAVA环境,然后再系统管理中全局环境变量设置相对应的JAVA_HOME的环境
  2. maven配置,安装相关的maven插件Pipeline Maven Integration,配置相关的.m2文件

六,在Jenkins中配置nodejs

  1. 在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
    2
    mv node-v8.12.0-linux-x64 node
    cd node/bin && ls
有node和npm

测试

1
./node -v
显示版本号即代表成功
  • 现在 nodenpm 还不能全局使用,做个链接

    1
    2
    ln -s /opt/mnt/node/bin/node /usr/local/bin/node
    ln -s /opt/mnt/node/bin/npm /usr/local/bin/npm
至此node就安装成功了
  1. jenkins中配置nodejs

    1563848937513

  2. 全局安装相应的angular的框架

    1
    npm install -g @angular/cli@7.3.9
  1. 修改npm的淘宝镜像,在/var/lib/jenkins的目录下创建相关

    1
    2
    3
    4
    5
    sudo su -s /bin/bash jenkins #登录jenkins
    cd /var/lib/jenkins
    touch .npmrc
    vi .npmrc
    registry=https://registry.npm.taobao.org/

七,jenkins修改用户运行

  1. 解决登录jenkins的问题,由于jenkins在运行时可以选择用户进行运行;

    • 打开Jenkins配置文件

      1
      vim /etc/sysconfig/jenkins

      找到如下行:

      将原来的Jenkins用户修改为root用户:

      1
      $JENKINS_USER="root"
  • 修改Jenkins相关文件夹用户权限

    更改jenkins三个文件夹的用户所属用户组:

    1
    2
    3
    chown -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
    2
    systemctl restart jenkins
    ps -ef | grep jenkins

    若显示为root用户,则表示修改完成

八,报错解决

  1. 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

    解决方案:

    • 优先参考官方Manage Docker as a non-root user

    • 关闭虚拟机的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时,都会通过检测该文件确定用户是否已完成认证。

      参考文档1

      参考文档2

  2. 切换jenkins用户登录

    1
    sudo su -s /bin/bash jenkins
  1. 解决jenkins拉取不了私服代码的问题
    1563847680915

  2. Jenkins远程连接linux

    由于配置原因造成一下错误

    错误:jenkins.plugins.publish_over.BapPublisherException: Failed to connect session for config [131]. Message [Auth fail]

    配置方法:

    • 生成密钥

      在我的jenkins服务器上/var/lib/jenkins用户目录下

      1
      2
      3
      4
      ssh-keygen # 密钥生成路径直接默认回车
      cd .ssh
      cat id_rsa.pub >> authorized_keys # 将公钥拷贝到authorized_keys文件
      scp authorized_keys user@ip:/root/.ssh #将生成的authorized_keys拷贝到要连接的linux机器上的对应用户下的.ssh文件夹下
    • 配置SSH server 系统管理->系统设置

      系统设置

      点击测试

      test ssh

    • 参考连接

九,总结

​ 至此yum源安装的jenkins就完毕了,之后会陆续推出相关的docker中安装jenkins,在k8s中使用jenkins的master/salves模式