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

优质内容筛选与推荐>>
1、面向对象三大基本特性,五大基本原则
2、Developing a Transactional Biztalk adapter
3、评价
4、《从零开始学Swift》学习笔记(Day 10)——运算符是“ +、-、*、/ ”吗?
5、Linux debug


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn