zoukankan      html  css  js  c++  java
  • jenkins 利用 linux 脚本实现部署

    我们已经将代码获取至我们 Jenkins 服务器上,由于我们的项目是使用 html 编写的,不需要编译,直接可以打包发布(实际工作中,可能需要更换配置文件)。

    安装nginx服务

    我们在 ci-node1 机子上安装 nginx 服务,并配置服务端口为 8090。

    /usr/local/nginx/sbin/nginx -t
    /etc/init.d/nginx start
    netstat -tunlp | grep nginx

    [root@ci-node1 conf]# netstat -tnpl|grep 8090
    tcp        0      0 0.0.0.0:8090            0.0.0.0:*               LISTEN      43141/nginx: master 

    通过浏览器访问 http://192.168.31.11:8090,可以看到如下页面

     

    nginx 服务的默认网站放在/usr/local/nginx/html 目录下

    我们把默认的网站目录 改成 /data/www/html 修改nginx配置 重启nginx

    [root@ci-node1 conf]# mkdir -p /data/www/html

    把ci-node2 HTML代码部署到ci-node1

    配置 ssh 免密登录

    因为我们要使用脚本将 ci-node2 上的程序代码推送到 ci-node1 上,所以需要配置ci-node2 到 ci-node1 的 ssh 免密码登录。

    输入ci-node1密码

    [root@ci-node2 scripts]# ssh-copy-id -i /root/.ssh/id_rsa.pub  192.168.31.11
    /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
    /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
    /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
    root@192.168.31.11's password: 
    root@192.168.31.11's password: 
    
    Number of key(s) added: 1
    
    Now try logging into the machine, with:   "ssh '192.168.31.11'"
    and check to make sure that only the key(s) you wanted were added.

    添加了密码

    下次ssh 192.168.31.11 不用再输入密码

    编写部署脚本(deploy.sh)

    [root@ci-node2 My-freestyle-job]# mkdir -p /server/scripts 
    [root@ci-node2 My-freestyle-job]# cd /server/scripts/
    
    [root@ci-node2 scripts]# vim deploy.sh
    #!/bin/bash 
    
    # 目标服务器 IP 地址 
    host=$1 
    
    # job 名称 
    job_name=$2 
    
     # 包名 
    name=web-$(date +%F)-$(($RANDOM+10000)) 
    # 打包 
    cd /var/lib/jenkins/workspace/${job_name} && tar -czf /opt/${name}.tar.gz ./* 
    
     # 发送包到目标服务器 
    ssh ${host} "cd /data/www/ && mkdir ${name}" 
    scp /opt/${name}.tar.gz $host:/data/www/${name} 
     # 解包
    ssh ${host} "cd /data/www/${name} && tar xf ${name}.tar.gz && rm -f ${name}.tar.gz" 
    
    # 使用软链接方式部署服务 
    ssh ${host} "cd /data/www/ && rm -rf html && ln -s /data/www/${name} /data/www/html"

    给脚本加上权限 chmod +x deploy.sh

    执行脚本

     sh deploy.sh 远程ip job名称

    [root@ci-node2 scripts]# sh deploy.sh 192.168.31.11 My-freestyle-job

    部署上来了

    [root@ci-node1 html]# cd /data/www/
    [root@ci-node1 www]# ll
    total 4
    lrwxrwxrwx 1 root root   30 Apr 13 00:39 html -> /data/www/web-2020-04-13-35660
    drwxr-xr-x 8 root root 4096 Apr 13 00:39 web-2020-04-13-35660

    Jenkins 配置构建

    jenkins配置调用脚本

    接下来我们在 Jenkins 上配置构建执行我们编写的部署脚本,回到 My-freestyle-job配置页面,配置构建,
    执行调用脚本 参数job名称调用jenkins全局变量

    调的${JOB_NAME} 的值就是 job名称

    点击页面上的链接可以查看所有可用的 jenkins 环境变量
    保存配置,

    注意:

    把jenkins启动用户改成root 修改jenkins配置文件,然后重启jenkins服务

     这里jenkins启动用户必须是root

    [root@ci-node2 ~]# cat /etc/sysconfig/jenkins |grep -v ^#|grep -v ^$
    JENKINS_HOME="/var/lib/jenkins"
    JENKINS_JAVA_CMD=""
    JENKINS_USER="root"
    JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"
    JENKINS_PORT="8080"
    JENKINS_LISTEN_ADDRESS=""
    JENKINS_HTTPS_PORT=""
    JENKINS_HTTPS_KEYSTORE=""
    JENKINS_HTTPS_KEYSTORE_PASSWORD=""
    JENKINS_HTTPS_LISTEN_ADDRESS=""
    JENKINS_DEBUG_LEVEL="5"
    JENKINS_ENABLE_ACCESS_LOG="no"
    JENKINS_HANDLER_MAX="100"
    JENKINS_HANDLER_IDLE="20"
    JENKINS_ARGS=""
    [root@ci-node2 ~]# systemctl restart jenkins
    [root@ci-node2 ~]# ps aux |grep jenkins
    root       8116 98.8 41.4 2306716 276800 ?      Ssl  01:27   0:15 /etc/alternatives/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon --httpPort=8080 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20
    root       8208  0.0  0.1 112712   968 pts/1    R+   01:27   0:00 grep --color=auto jenkins

    回到 job 主页面,点击“立即构建”后,访问 nginx服务的主页面,我们发现服务已经部署成功

    看输出 脚本执行成功

    通过jenkins 实现 gitlab仓库代码拉过来,然后发布到服务器上部署

  • 相关阅读:
    谈谈年度最佳代码“不管你们信不信,反正我信了”
    如何:用对称密钥对 XML 元素进行加密
    WPF 线程间访问控件
    xml和模型对象之间的序列化和反序列化
    [转]汇编语言的准备知识给初次接触汇编者 3
    asp.net mvc 自定义路由 【asp.net mvc 自学笔记】
    [转]汇编语言的准备知识给初次接触汇编者 2
    sftpd 启动 报错: vsftpd:500 OOPS: bad bool value in config file for: anonymous_enable
    Linux iptables配置FTP的主动和被动模式
    cacti安装完后就停留在登陆界面,输入默认的用户名密码登陆不进去!
  • 原文地址:https://www.cnblogs.com/mingerlcm/p/12688667.html
Copyright © 2011-2022 走看看