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. Form,tagName和nodeName的区别

    首先介绍DOM里常见的三种节点类型(总共有12种,如docment):元素节点,属性节点以及文本节点,例如<h2 class="title">head</h2&g ...

  2. 初学者下载使用Python遇到的问题看它就行了

    首先在python管网(www.python.org)中找到对应的版本与系统,以(window7系统64位python3.7.3为例) 打开电脑--打开浏览器--输入www.python.org--d ...

  3. 在CentOS7上部署PostgreSQL11数据库系统

    在数据库上的选择,也是基于了稳定性为前提.其实选择的范围并不是太大,基本可以选择的范围也就是SQLServer.MySQL.PostgreSQL这三种.SQL Server是微软的商业数据库,无论是性 ...

  4. 《Redis设计与实现》阅读笔记(一)--Redis学习

    Redis学习资料与过程记录 在实习中经常会用到很多Redis,对Redis有了一些模糊的了解,总觉得隔靴搔痒的不痛快,所以决定开始深入的了解Redis,也作为我实习期间的目标. 这篇只是为了占个位置 ...

  5. UVa 10055

    说一下犯错的地方: 1)没有注意数据范围,题目中是The input numbers are not greater than balabalabala. 而这个32位的int类型恰好装不下2^32, ...

  6. NO.6:自学python之路------面向对象、内存持久化

    引言 虽然加速学习了,可是还是感觉进度不够快,担心.还得准备毕业论文,真是焦虑. 正文 面向对象 编程是程序员用特定语法+数据结构+算法组成的代码,告诉计算机如何执行任务的过程.对不同的编程方式的特点 ...

  7. python3 通过qq邮箱定时发送邮件

    下面的代码为了每天定时发送监控邮件,监控什么呢?监控当天redis队列中是否有没有消费的数据,和当天mysql中新增的数据量 # -*- coding:utf-8 -*- from common.re ...

  8. mongodb基本使用(四)

    MongoDB 条件操作符 描述 条件操作符用于比较两个表达式并从mongoDB集合中获取数据. MongoDB中条件操作符有: (>) 大于 - $gt (<) 小于 - $lt (&g ...

  9. 《[C#] int与System.Int32有什么区别》

    最近园里的TeamOne写了一篇<[C#] int与System.Int32有什么区别>,发现里面有不少精彩的评论,所以忍不住想这篇文章总结一下:> 本文的主要参考资料: 1.< ...

  10. Alpha版本冲刺(六)

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...