公司新購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
查看winRM服務狀態,默認都是未啓動狀態服務器
winrm e winrm/config/listener
app
因爲以前我已經配置過了,因此已經啓動監聽ui
開啓winRM加密
winrm quickconfig
爲winrm service 配置auth
winrm set winrm/config/service/auth '@{Basic="true"}'
爲winrm service 配置加密方式爲容許非加密
winrm set winrm/config/service '@{AllowUnencrypted="true"}'
shell命令'進入你要構建的windows項目目錄下,執行python腳本',這個路徑是我搭建的gogs路徑,root下一個項目
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 表示當前構建的項目名稱
#!/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將工程名稱傳入過去進行判斷去執行那個項目的更新。