• Jenkins学习笔记5


    1. [root@localhost ~]# cd /var/lib/jenkins/workspace/nginx_root_sync
    2. [root@localhost nginx_root_sync]# ll
    3. total 16
    4. -rw-r--r-- 1 jenkins jenkins 6 Sep 20 20:57 1.php
    5. -rw-r--r-- 1 jenkins jenkins 5 Sep 20 20:57 2.php
    6. -rw-r--r-- 1 jenkins jenkins 5 Sep 20 21:17 3.php
    7. -rw-r--r-- 1 jenkins jenkins 35 Sep 20 20:57 README.md

     这个目录其实就是一个workspace。

    自动发布系统:

    SSH免密:

    开发者要产生ssh空密码密钥对,把公钥添加到gitlab(过程省略)

    在开发者进行git clone创建好的项目,进行开发

    1. [root@git-developer ~]# git clone git@192.168.17.118:root/auto_build_web.git
    2. Cloning into 'auto_build_web'...
    3. The authenticity of host '192.168.17.118 (192.168.17.118)' can't be established.
    4. ECDSA key fingerprint is SHA256:4dogA08L5gdfaA69BGekE13kzSuIP2vcRp9rsqYnpn0.
    5. ECDSA key fingerprint is MD5:93:34:b9:61:03:cd:00:92:b9:91:3d:b6:6c:7a:84:95.
    6. Are you sure you want to continue connecting (yes/no)? yes
    7. Warning: Permanently added '192.168.17.118' (ECDSA) to the list of known hosts.
    8. remote: Enumerating objects: 3, done.
    9. remote: Counting objects: 100% (3/3), done.
    10. remote: Compressing objects: 100% (2/2), done.
    11. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
    12. Receiving objects: 100% (3/3), done.
    13. [root@git-developer ~]# ll
    14. total 4
    15. -rw-------. 1 root root 1518 Sep 2 02:39 anaconda-ks.cfg
    16. drwxr-xr-x 3 root root 35 Sep 20 21:41 auto_build_web
    17. drwxr-xr-x 3 root root 74 Sep 20 21:16 jenkins

     写好代码并上传:

    1. [root@git-developer auto_build_web]# echo 1111 > 1.php
    2. [root@git-developer auto_build_web]# git add *
    3. [root@git-developer auto_build_web]# git commit -m "Added 1.php"
    4. [main e5d9341] Added 1.php
    5. 1 file changed, 1 insertion(+)
    6. create mode 100644 1.php
    7. [root@git-developer auto_build_web]# git push -u origin main
    8. Counting objects: 4, done.
    9. Delta compression using up to 2 threads.
    10. Compressing objects: 100% (2/2), done.
    11. Writing objects: 100% (3/3), 275 bytes | 0 bytes/s, done.
    12. Total 3 (delta 0), reused 0 (delta 0)
    13. To git@192.168.17.118:root/auto_build_web.git
    14. e223804..e5d9341 main -> main
    15. Branch main set up to track remote branch main from origin.

    Jenkins安装对应的插件:

    jenkins安装gitlab和gitlab hook插件:

    安装好之后,要重启下jenkins。 

    Available:可获得的。

    Installed:已安装的。

    添加Jenkins服务器公钥到gitlab:

    第1步: jenkins产生root用户的ssh空密码密钥对(步骤省略)

    添加公钥到gitlab:

    测试下连通性:

    在jenkins-server服务器上,通过git clone方法测试。

    在jenkins服务器上克隆仓库,确认连接OK

    1. [root@jenkins-server ~]# git clone git@192.168.17.118:root/auto_build_web.git
    2. Cloning into 'auto_build_web'...
    3. The authenticity of host '192.168.17.118 (192.168.17.118)' can't be established.
    4. ECDSA key fingerprint is SHA256:4dogA08L5gdfaA69BGekE13kzSuIP2vcRp9rsqYnpn0.
    5. ECDSA key fingerprint is MD5:93:34:b9:61:03:cd:00:92:b9:91:3d:b6:6c:7a:84:95.
    6. Are you sure you want to continue connecting (yes/no)? yes
    7. Warning: Permanently added '192.168.17.118' (ECDSA) to the list of known hosts.
    8. remote: Enumerating objects: 6, done.
    9. remote: Counting objects: 100% (6/6), done.
    10. remote: Compressing objects: 100% (4/4), done.
    11. remote: Total 6 (delta 0), reused 0 (delta 0), pack-reused 0
    12. Receiving objects: 100% (6/6), done.
    13. [root@jenkins-server ~]# ll
    14. total 4
    15. -rw-------. 1 root root 1518 Sep 2 02:39 anaconda-ks.cfg
    16. drwxr-xr-x 3 root root 48 Sep 20 22:10 auto_build_web
    17. drwxr-xr-x 2 root root 42 Sep 20 11:28 soft
    18. [root@jenkins-server ~]# cd auto_build_web/
    19. [root@jenkins-server auto_build_web]# ll
    20. total 12
    21. -rw-r--r-- 1 root root 5 Sep 20 22:10 1.php
    22. -rw-r--r-- 1 root root 6183 Sep 20 22:10 README.md

    Jenkins

    这是一个构建任务名称:

     然后点击OK。

    这个root凭据需要进行下确认。

    更改下主分支名称,不是master,是main。

    Gitlab知道自己的projects或者仓库发生了变化,通过WebHook告诉jenkins,触发。

    生成token令牌。

     构建:这次我们不使用Publish over SSH了。我们使用执行Shell。

    使用Shell,那说明我们可以使用Shell来发挥了。

    1. #!/bin/bash
    2. SOURCE_DIR=/var/lib/jenkins/workspace/$JOB_NAME/
    3. DEST_DIR=/usr/share/nginx/html
    4. /usr/bin/rsync -av --delete $SOURCE_DIR root@192.168.17.121:$DEST_DIR

    rsync这个工具还是很强大的,需要学习下。

    $JOB_NAME Name of the project of this build。

     另外,执行此脚本不再是使用publish over ssh插件,而是使用jenkins服务器上的jenkins用户来执行的。

    1. [root@jenkins-server ~]# grep jenkins /etc/passwd
    2. jenkins:x:998:996:Jenkins Automation Server:/var/lib/jenkins:/bin/false
    3. [root@jenkins-server ~]# usermod -s /bin/bash jenkins
    4. [root@jenkins-server ~]# grep jenkins /etc/passwd
    5. jenkins:x:998:996:Jenkins Automation Server:/var/lib/jenkins:/bin/bash

    让jenkins具有登录权限。能够使用su jenkins命令进行切换。

    问题: 既然是使用jenkins服务器上的jenkins用户来执行,为什么rsync不传给10.1.1.14的jenkins用户,而是传给它的root用户?

    答: 因为10.1.1.14上没有jenkins用户,就算有jenkins用户,对/usr/share/nginx/html也没有写权限

    我们再看下/usr/share/nginx/html目录的权限:

    html的目录的拥有者是root,具有可读可写可执行的权限。

    然后再执行命令:

    再确认下rsync这个工具有没有安装:

    小结:

    使用jenkins用户执行rsync脚本同步到nginx的root用户。

    再配置Jenkins跟gitlab的对接:

    配置gitlab允许本地网络使用webhook:

    gitlab默认在本地网络不能使用webhook,所以我们配置允许。(使用管理员配置,普通用户看不到下面的扳手图标。)

     这个SSL verification的选项要去掉。

    安全带来的问题对运维来说是麻烦。

    Urlis blocked: Requests to the local network are not allowed

    在配置的过程中遇到这个问题。

    那一切就准备就绪。

    然后我这边也将几个系统的时间重新进行了同步,保证每台服务器的时间都是相同的。

    ntpdate time1.aliyun.com

    systemctl restart ntpd

    没有出现构建的自动运行,检查发现这个地方没有被勾选。Push events。

    看到jenkins的这个地方开始进行构建。

    可以看到文件已经同步到了nginx-server服务器上了。

    然后我们再看下构建的日志:

  • 相关阅读:
    (十)Docker的基本操作
    Figma是什么软件?有哪些优势和劣势?
    第一章概述
    如何在next14项目中加入favicon
    C语言实现三子棋小游戏(源码+教程)
    【LeetCode】221. 最大正方形
    Vue项目中实现拖拽排序效果-demo
    关于c#多线程中的几个信号量
    OAuth2+JWT新一代认证技术
    【jmeter】接口测试流程
  • 原文地址:https://blog.csdn.net/chang_chunhua/article/details/133102025