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服务器的更多相关文章

  1. jenkins自动部署代码到多台服务器

    下面讲一下如何通过一台jenkins服务器构建后将代码分发到其他的远程服务器,即jenkins自动部署代码到多台服务器. 1.下载 pulish over ssh 插件 2.系统管理 -> 系统 ...

  2. 使用Jenkins自动部署博客

    title: 使用Jenkins自动部署博客 toc: true comment: true date: 2017-12-17 19:48:10 tags: ['Jenkins', 'CI'] cat ...

  3. 内存溢出导致jenkins自动部署到tomcat失败

    原文地址:http://openwares.net/java/jenkens_deploy_to_tomcat_error_of_outofmemoryerror.html jenkins自动部署wa ...

  4. 关于gitlab+jenkins自动部署代码的实现

    本人PHP开发者,项目组大多是PHP,少量java项目. 因公司目前服务器和项目的管理比较混乱,与领导商量后,决定尝试 gitlab+jenkins自动化部署(之前用的svn FTP手动部署代码),解 ...

  5. Jenkins自动部署spring boot

    Jenkins自动部署spring boot 背景介绍 本公司属于微小型企业,初期业务量不高,所有程序都写在一个maven项目里面,不过是多模块开发. 分了login模块,service模块,cms模 ...

  6. Jenkins自动部署Tomcat项目

    Jenkins自动部署Tomcat项目 1.安装jenkins 插件 启动Jenkins,进入系统管理-插件管理: 选择Deploy to container Plugin 插件安装:

  7. 使用jenkins自动部署java工程到jboss-eap6.3 -- 1.环境搭建

    使用jenkins自动部署java工程到jboss-eap6.3 -- 1.环境搭建 目录 使用jenkins自动部署java工程到jboss-eap6.3 -- 1.环境搭建 使用jenkins自动 ...

  8. 持续集成之Jenkins自动部署war包到远程服务器

    一.无war包链接的情况 无war包链接时,需先下载war包到本地,然后执行: ---------------------------------------------以下部分为转载-------- ...

  9. Jenkins自动部署增加http状态码校验

    公司推进Jenkins自动化部署,因为web站点都是集群部署,部署需要测试指定服务器web服务是否成功启动,页面是否正常访问,经过不断baidu发现,python的request模块可以很好的解决这一 ...

随机推荐

  1. bootstrap学习笔记(5)

    Bootstrap输入框组 主要记住一个原则 创建输入框的步骤 把前缀或后缀元素放在一个带有 class .input-group 的 <div> 中. 接着,在相同的 <div&g ...

  2. Jenkins +svn +maven +tomcat+ ansible 自动化批量部署

    Jenkins +svn +maven +tomcat+ ansible 自动化批量部署 一.部署svn yum install subversion 先创建目录 mkdir /home/svn 创建 ...

  3. [PLC]ST语言二:LDP_LDF_ANDP_ANDF_ORP_ORF

    一:LDP_LDF_ANDP_ANDF_ORP_ORF基本指令 说明:简单的顺控指令不做其他说明. 控制要求:无 编程梯形图: 结构化编程ST语言: (*LDP(EN,s)/ORP(EN,S)*) M ...

  4. pandas安装以及出现的问题

    pandas安装以及出现的问题 1.pandas 安装 pandas是Python的第三方库,所以使用前需要安装一下,直接使用pip install pandas就会自动安装,安装成功后显示的以下的信 ...

  5. jmeter—操作数据库

    添加JDBC Request,添加需要执行的sql语句 在这个界面需要配置Variabke Name,内容要与上表中的Name值相同:数据库的用户名.密码.URL.驱动这些基本信息要在这里配置:其他选 ...

  6. 接口测试中抓包工具Charles的使用

    在被测接口并没有明确的接口文档给出时,我们需要借助抓包工具来帮助测试,利用抓包工具我们几乎可以获得接口文档中能给你的一切.常见的抓包工具有Charles和Fiddler, Fiddler只能用在Win ...

  7. Linux入门基础(七):Linux软件管理基础

    源代码形式 绝大多数开源软件都是直接以源代码形式发布 源代码一般会被打包成tar.gz的归档压缩文件 程序源代码需要编译成为二进制形式之后才能够运行 源代码基本编译流程 : ./configure 检 ...

  8. 用编程方式编写Babylon格式的宇宙飞船3D模型

    使用上一篇文章(https://www.cnblogs.com/ljzc002/p/9353101.html)中提出的方法,编写一个简单的宇宙飞船3D模型,在这篇文章中对模型制作流程和数学计算步骤进行 ...

  9. jsp内置对象 转发与重定向的区别

    jsp 内置对象  转发与重定向的比较 重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程. 与之相反,重 ...

  10. 【LDAP安装】在已编译安装的PHP环境下安装LDAP模块

    在已编译安装的PHP环境下安装LDAP模块 (乐维温馨提示:其他模块也能以这个方式安装) 1.在PHP源码包内找到ldap模块文件 cd php-5.6.37 cd ext/ldap/ 2.phpiz ...