• jenkins自动部署windwos服务器


    jenkins 持续构建windows 项目

    需求说明

      公司新购windwos服务器,并配置了堡垒机,由于经常要提交代码进行更新,导致手动部署很是麻烦,故采用公司jenkins实行持续构建

      jenkins服务部署到linux服务器,项目代码存放到windows服务器

    环境说明

      服务端: Centos7

      客户端: Windows Server 2012 R2

    软件说明

      python 3.5.6

      winrm 'winRM服务是windows server下PowerShell的远程管理服务。Python脚本通过连接winRM模块操作windows命令行'

    操作过程

    配置windows服务器

    • 查看winRM服务状态,默认都是未启动状态

       winrm e winrm/config/listener

          由于之前我已经配置过了,所以已经启动监听

      

    • 开启winRM

       winrm quickconfig

        

    •  为winrm service 配置auth

       winrm set winrm/config/service/auth '@{Basic="true"}'

    •  为winrm service 配置加密方式为允许非加密

        winrm set winrm/config/service '@{AllowUnencrypted="true"}'

    配置jenkins服务

    • 选择自由风格项目  

    shell命令'进入你要构建的windows项目目录下,执行python脚本',这个路径是我搭建的gogs路径,root下一个项目

    配置了linux python脚本 

    cd /usr/local/cpgroup/git/gogs-repositoriesd/root/saasiorder.git/hooks

    #!/usr/bin/python
    import winrm
    import sys
    import re
    tag_name=sys.argv[1]
    build_name=sys.argv[2]
    
    Host='windows server 地址'
    Port='5985'
    User='windwos server 用户名 如:adminstrator'
    Pass='密码'
    
    def Running(host,port,user,passwd):
    
        win2012 = winrm.Session('http://' + host + ':' + port + '/wsman',auth=(user,passwd))
        try:
            r1=win2012.run_cmd('cd /d C:/Users/Administrator/Desktop/ && python deploy.py %s %s'%(tag_name,build_name))
            print(r1.std_out.decode())
        except  BaseException as e:
            print ('部署异常,%s'%e)
    
    if __name__ == '__main__':
        Running(Host,Port,User,Pass)

     #tag_name 表示选择那个标签进行构建,本人的项目操作是通过打标签的方式进行构建,其他人请自行更改
     #build_name 表示当前构建的项目名称

    配置windows python 脚本

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # Author:hc.li
    from subprocess import PIPE, Popen
    import os, sys
    
    Source_path = os.getcwd()
    
    Iorder_Repo_path = r'D:SAASiOrder'
    Iorder_Project_path = r"D:iOrder"
    
    def cmdline(command):
        process = Popen(
            args=command,
            stdout=PIPE,
            shell=True
        )
        return process.communicate()[0]
    
    # tag_name='release-20190403-02'
    tag_name = sys.argv[1]
    build_name = sys.argv[2]
    
    def Check_Tag(path):
        os.chdir(path)
        cmdline('git checkout master')
        cmdline('git pull')
        Status_code = cmdline('git tag |findstr %s' % tag_name)   #当前方法进行判断标签使用,如果没有使用标签构建 则将当前方法注释
        Status_code = str(Status_code, encoding='utf8')
    
        if not Status_code:
            print('标签不存在,请检查...')
            return
        else:
            return Status_code
    
    
    def Update_Code_Iorder():
        try:
            res = Check_Tag(Iorder_Repo_path)           #判断标签是否存在
            if not res:
                return
            print(res)
            cmdline('git checkout %s' % tag_name)       #如果传入标签值存在 则切换到当前标签
            rs = cmdline("xcopy " + Iorder_Repo_path + "\*.* " + Iorder_Project_path + " /s/e/y")   #执行拷贝命令
            print(rs)
        except BaseException as e:
            print('iorder 更新失败 %s'%e)
    
    if __name__ == '__main__':
        Update_Code_Iorder()

     后续

    总结:第一次操作linux下jenkins构建windwos服务器,执行的cmd命令都在linux下的脚本中执行,导致出现很多问题(拷贝失败,无法创建文件夹等),尽量将linux下的脚本做成调用脚本,去调用远程服务器上的python脚本。

    并使用windows下的python脚本去执行其他的所有操作并返回结果。jenkins会直接输出到控制台

    如果该windwos服务器上搭建多个项目,可以将其他的操作 整合到windwos下python脚本,jenkins将工程名称传入过去进行判断去执行那个项目的更新。

     

  • 相关阅读:
    史上最全Html与CSS布局技巧
    Discuz! X的CSS加载机制
    关于input框只能输入纯数字问题
    对象的数据属性
    vue中将光标定位到Input上的问题
    端口占用问题解决方案
    el-button如何消除右边计数样式
    如何改变vscode的背景颜色
    为什么——要实例化对象?
    call()&apply()
  • 原文地址:https://www.cnblogs.com/charles1ee/p/10481746.html
Copyright © 2020-2023  润新知