jenkins自动部署windwos服务器

jenkins 持续构建windows 项目

需求说明

  公司新购windwos服务器,并配置了堡垒机,因为常常要提交代码进行更新,致使手动部署非常麻烦,故采用公司jenkins实行持续构建python

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

环境说明

  服务端: Centos7git

  客户端: Windows Server 2012 R2shell

软件说明

  python 3.5.6windows

  winrm 'winRM服务是windows server下PowerShell的远程管理服务。Python脚本经过链接winRM模块操做windows命令行'bash

操做过程

配置windows服务器

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

   winrm e winrm/config/listenerapp

      因为以前我已经配置过了,因此已经启动监听ui

  

  • 开启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将工程名称传入过去进行判断去执行那个项目的更新。

相关文章
相关标签/搜索