zoukankan      html  css  js  c++  java
  • Jenkins获取gitlab源代码

    Jenkins获取gitlab源代码

    Jenkins权限获取

    在日常工作做由于Jenkins启动用户是Jenkins,在执行脚本时系统命令是无法让Jenkins执行的,如果需要Jenkins权限有两种办法:
    1. sudo授权
    2. 启动用户改为root [这里就使用这个办法了,因为做sudo授权太浪费时间了,其次gitlab都是内网使用没有什么安全威胁]
    
    由于sudo授权比较繁琐,这里直接将启动用户改为root即可,大家可能说这个会不会不安全,其实不会
    因为Jenkins是在内网部署,自己使用的. 无法呗外部用户访问,所以我们只需要配置为root用户启动即可
    
    JENKINS_USER="jenkins" 
    
    # 修改之前查看启动用户:
    [root@node1 freestyle-job]# lsof  -i:8080
    COMMAND   PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    java    12742 jenkins  162u  IPv6 331298      0t0  TCP *:webcache (LISTEN)
    #目前启动用户是Jenkins,我们需要改为root用户来运行
    
    # sed来替换启动用户改为root
    sed -i  "29s#JENKINS_USER="jenkins"#JENKINS_USER="root"#g" /etc/sysconfig/jenkins
    
    # 修改完成重启Jenkins
     systemctl restart jenkins.service
     
     
    # 查看重启状态和启动用户
    [root@node1 freestyle-job]# lsof  -i:8080
    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    java    12594 root  162u  IPv6 330233      0t0  TCP *:webcache (LISTEN)
    
    可以看到用户已经改为了root
    

    上面这些更改只为做一件事,让大家理解.权限的作用,如果我执行构建里面有 创建用户等这些敏感信息的时候非root用户权限是不允许做这些操作的. 看下面的案例:

    Jenkins权限案例:

    创建一个新的构建

    检查当前Jenkins与运行用户:

    [root@node1 plugins]# lsof -i:8080
    COMMAND   PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    java    13892 jenkins  162u  IPv6 338577      0t0  TCP *:webcache (LISTEN)
    java    13892 jenkins  590u  IPv6 341276      0t0  TCP node1:webcache->10.0.0.1:58342 (ESTABLISHED)
    目前我们使用的是Jenkins用户,按理来说Jenkins是不可以越权创建用户的,下面来看实际情况,以便于我们理解Jenkins权限.
    

    我们看到了一条红色信息:

    看到 Permission denied 我们就可以得出结论了, Jenkins是无法创建用户的没有权限,所以报错,权限不足

    修改Jenkins运行用户,来重新执行构建.

    # sed来替换启动用户改为root
    sed -i  "29s#JENKINS_USER="jenkins"#JENKINS_USER="root"#g" /etc/sysconfig/jenkins
    
    # 修改完成重启Jenkins
    systemctl restart jenkins.service
    

    重新构建截图:

    Linux下检查用户是否被创建:

    [root@node1 plugins]# id chenleilei
    uid=1001(chenleilei) gid=1001(chenleilei) groups=1001(chenleilei)
    
    chenleilei用户已经被创建,说明我们的理解是正确的,Jenkins是无法处理超越本身权限之外的工作的.
    

    权限获取还有第二种方法 ,就是使用sudo授权来配置让Jenkins能够有权限执行,但是配置sudo授权.太浪费时间,这种策略是最好的办法.
    但是其实我感觉..项目目录的权限也至关重要,这里听老师讲课改为了Jenkins用户执行报错,其实原因就出现在 项目目录是root权限,Jenkins是无权访问的.如果需要访问或者创建文件权限就必须将:
    /var/lib/jenkins/workspace/my-freestyle-job/ 这个目录权限改为 Jenkins,否则他无法越权在这个目录创建和修改文件.

    检测我的理解是否正确:

    修改目录 /var/lib/jenkins/workspace/my-freestyle-job/ 权限为Jenkins :
     chown -R jenkins.jenkins  /var/lib/jenkins/workspace/my-freestyle-job
     
    修改启动用户为Jenkins:
    sed -i  "29s#JENKINS_USER="root"#JENKINS_USER="jenkins"#g" /etc/sysconfig/jenkins
    
    #重启Jenkins
    [root@node1 my-freestyle-job]# systemctl restart jenkins.service 
    [root@node1 my-freestyle-job]# systemctl status jenkins.service 
    ● jenkins.service - LSB: Jenkins Automation Server
       Loaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled)
       Active: active (running) since Fri 2019-12-27 14:32:41 CST; 6s ago  ##-- 状态正常
    
    #重新执行构建任务
    

    注意点:

    我们运行任何任务都是从任务的文件夹下开始的: 
    /var/lib/jenkins/workspace/my-freestyle-job/
    
    如果我们任务中有创建文件但是没写绝对路径,它只会在 /var/lib/jenkins/workspace/my-freestyle-job/ 下面创建.
    这些在控制台是看不到的.但是可以看到构建目录
    

    Jenkins故障:

    构建过程中重启了Jenkins就会出现启动无法打开网页:
    解决: rm -f /var/lib/jenkins/jobs/my-freestyle-job/nextBuildNumber
    

    Jenkins配置git拉取gitlab仓库代码自动发布:

    点击 test 后点击 push events 测试,然后再Jenkins中查看是否触发了任务.

    Jenkins中看到的:

    这次我们没有主动点击 "立即构建" 他自己就 主动push了一次,再上面的图中也可以清楚的看到: "Started by GitLab push by Administrator" 他是又gitlab自动触发的立即构建.

    回到gitlab查看我们刚才的构建日志:


    还记得我们Jenkins中的shell执行了什么吗?

    检查是否创建:

    这样就完成了 git+gitlab+Jenkins实现自动构建自动集成的过程.
    在企业中同样的做法. 只不过 主动触发事件 会变成shell 的方式,一旦提交就会编译并立即发布.

    自动发布:

    测试 push文件,然后自动发布:
    回到一台绑定了 gitlab的服务器 克隆代码:

    安装一个nginx 查看页面效果:

    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    yum install -y wget
    wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-7.repo
    yum clean all
    yum install -y nginx
    

    页面效果:

    修改构建任务:

    目的是让 修改后的文件拷贝到html,或者也可以做ln -s 的软连接,这里演示就做拷贝了

    执行push:

    [root@node1 leilei_test]# echo  "<h1>chenleilei _ auto test </h1>" >>index.html[root@node1 leilei_test]# git add *[root@node1 leilei_test]# git commit -m "midify index.html"[root@node1 leilei_test]# git push -u origin master
    

    检查网页状态:

    到这里 自动化发布已经完成!!

    微信赞赏

    支付宝赞赏

  • 相关阅读:
    输出流OutputStream简单理解
    IO流实现写入规定的acci码值
    事务的ACID属性&&五种状态
    java基础总结之Hashtable
    HBase
    oracle交换分区
    ArrayList 和 LinkedList 的区别(底层数据结构): 什么时候使用arrayList,什么时候使用LinkedList (一个小时)
    Mac中MariaDB数据库的安装步骤
    Mac OS X中MacPorts安装和使用(linux 的 yum)
    SFTP秘钥认证
  • 原文地址:https://www.cnblogs.com/superlinux/p/15385228.html
Copyright © 2011-2022 走看看