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=''
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将工程名称传入过去进行判断去执行那个项目的更新。
jenkins自动部署windwos服务器的更多相关文章
- jenkins自动部署代码到多台服务器
下面讲一下如何通过一台jenkins服务器构建后将代码分发到其他的远程服务器,即jenkins自动部署代码到多台服务器. 1.下载 pulish over ssh 插件 2.系统管理 -> 系统 ...
- 使用Jenkins自动部署博客
title: 使用Jenkins自动部署博客 toc: true comment: true date: 2017-12-17 19:48:10 tags: ['Jenkins', 'CI'] cat ...
- 内存溢出导致jenkins自动部署到tomcat失败
原文地址:http://openwares.net/java/jenkens_deploy_to_tomcat_error_of_outofmemoryerror.html jenkins自动部署wa ...
- 关于gitlab+jenkins自动部署代码的实现
本人PHP开发者,项目组大多是PHP,少量java项目. 因公司目前服务器和项目的管理比较混乱,与领导商量后,决定尝试 gitlab+jenkins自动化部署(之前用的svn FTP手动部署代码),解 ...
- Jenkins自动部署spring boot
Jenkins自动部署spring boot 背景介绍 本公司属于微小型企业,初期业务量不高,所有程序都写在一个maven项目里面,不过是多模块开发. 分了login模块,service模块,cms模 ...
- Jenkins自动部署Tomcat项目
Jenkins自动部署Tomcat项目 1.安装jenkins 插件 启动Jenkins,进入系统管理-插件管理: 选择Deploy to container Plugin 插件安装:
- 使用jenkins自动部署java工程到jboss-eap6.3 -- 1.环境搭建
使用jenkins自动部署java工程到jboss-eap6.3 -- 1.环境搭建 目录 使用jenkins自动部署java工程到jboss-eap6.3 -- 1.环境搭建 使用jenkins自动 ...
- 持续集成之Jenkins自动部署war包到远程服务器
一.无war包链接的情况 无war包链接时,需先下载war包到本地,然后执行: ---------------------------------------------以下部分为转载-------- ...
- Jenkins自动部署增加http状态码校验
公司推进Jenkins自动化部署,因为web站点都是集群部署,部署需要测试指定服务器web服务是否成功启动,页面是否正常访问,经过不断baidu发现,python的request模块可以很好的解决这一 ...
随机推荐
- node.js学习笔记(一)——创建第一个应用
巧妇难为无米之炊.要学习node.js,当然必须先有node.js环境(可以去官网 http://nodejs.cn/ 下载安装),如果还是不懂怎么配置开发环境,度娘会告诉你一切. 安装完成环境之后, ...
- 【轮子狂魔】WeChatAPI 开源系统架构详解
如果使用WeChatAPI,它扮演着什么样的角色? 从图中我们可以看到主要分为3个部分: 1.业务系统 2.WeChatAPI: WeChatWebAPI,主要是接收微信服务器请求: WeChatAP ...
- android 图片二维码识别和保存(二)
续上一篇,开发图片二维码识别功能后,我们对功能进行性能分析内存占用显著提高了,不使用该功能内存占用大约是147M,使用这个功能多次以后,高达203M. 因此对功能进行研究,发现每次生成的图片没有即时的 ...
- arduino八段数码管使用
一:八段数码管的使用 控制要求:0-9的计时数据 实物连接图: 控制代码: //智慧自动化2018.6.11 ;//定义数字接口7 连接a 段数码管 ;// 定义数字接口6 连接b 段数码管 ;// ...
- 使用Fiddler进行Web接口测试
一.Fiddler简介1.为什么是Fiddler?抓包工具有很多,小到最常用的web调试工具firebug,达到通用的强大的抓包工具wireshark.为什么使用fiddler?原因如下: A)Fir ...
- Unity萌新日记—开发小技巧与冷知识(脚本篇)
在学习unity的过程中,总会遇到很多零碎的知识点和小技巧,在此把它们记录下来,方便日后查看. 第一篇是关于脚本的一些你可能不知道的小知识. 还是个正在学习的萌新,如果写的不好,请谅解. Unity版 ...
- 扩展Unity Inspector
Unity Editor下,可以在不改变原有布局的情况下扩展Inspect的界面. 在继承了Editor的类中,有两种实现方式: using UnityEditor; [CustomEditor(ty ...
- ftp部署及使用
常用软件安装及使用目录 http://www.jb51.net/article/106604.htm ftp部署 本篇文章主要介绍了CentOS7.0下安装FTP服务的方法,小编觉得挺不错的,现在 ...
- Python3入门机器学习 - k近邻算法
邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一.所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代 ...
- 2018年第九届蓝桥杯【C++省赛B组】
2标题:明码 汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛.16点阵的字库把每个汉字看成是16x16个像素信息.并把这些信息记录在字节中. 一个字节可以存储8位信息,用32个字节就 ...