jenkins 编译.net 结合 ansible 操作 windows 进行发布

本贴最后更新于 2075 天前,其中的信息可能已经时移俗易

使用 Jenkins 编译.net 项目需要用到 windows 的 slave 节点,安装依赖的工具:如 MSBuild 和.NET Framework, winrar 等

MSBuild 可以直接安装和开发使用一致版本的 Visual Studio,使用其自带的 MSBuild.exe,比如我这里安装了 Visual Studio 2019 对应的路径为 C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\amd64\MSBuild.exe
把用到的工具的路径加入到 windows slave 配置环境变量 path 中
image.png

jenkins pipeline

pipeline { agent { label 'windows-slave' } parameters{ gitParameter branchFilter: '.*', tagFilter: '.*', defaultValue: 'dev', name: 'TAG', type: 'PT_BRANCH_TAG', selectedValue: 'TOP', sortMode: 'DESCENDING_SMART' choice(name: 'PLAYBOOK', choices: 'net\nnet-rollback', description: 'net 部署\nnet-rollback 回滚') choice(name: 'HOSTS', choices: 'test-pms-group', description: '选择发布的主机组:\ntest-pms-group 测试环境') } environment { GIT = 'http://example.com/mgpms/MG_HuiZhu.git' PROJECT = 'MG_HuiZhu' APP_PATH = 'D:\\data\\apps\\MG_HuiZhu\\' BUILDFILE = 'MG_HuiZhu2.0\\Huazhu.PMS.WebSite\\Huazhu.PMS.WebSite.csproj' SOLUTIONDIR = "${WORKSPACE}\\MG_HuiZhu2.0\\" PACKAGE = "${WORKSPACE}\\MG_HuiZhu2.0\\Huazhu.PMS.WebSite\\obj\\Release\\Package\\PackageTmp\\" CONFIGURATION = 'Release' PLAYBOOK = "$PLAYBOOK" // ansible的的的palybook MAIL_TO = "yunwei@hhotel.com" ZIP = "target" CHECK_TAG = "${TAG}" // 分支或tag } stages { stage ('克隆代码') { steps { deleteDir() // 清理工作目录 git credentialsId: '9c9b7b17-04d5-47de-9b8f-6207a78e6973', url: "${GIT}" bat 'git checkout %CHECK_TAG%' } } stage ('编译打包') { steps { script { bat 'echo %TIME%' bat 'MSBuild %BUILDFILE% /p:Configuration=%CONFIGURATION% /p:SolutionDir=%SOLUTIONDIR% /t:Rebuild /p:DeployOnBuild=true /p:AllowUntrustedCertificate=True' bat 'rd /s/q D:\\jenkins\\workspace\\test-MG_HuiZhu\\MG_HuiZhu2.0\\Huazhu.PMS.WebSite\\Scripts\\Plugin\\My97DatePicker\\' bat 'winrar a -ep1 -r target.zip %PACKAGE%' stash(name: "target", includes: "target.zip") } } } stage ('部署') { agent { label "master" } environment { TIME = sh(script: "date '+%Y%m%d%H%M%S'", returnStdout: true).trim() } steps { deleteDir() // 清理工作目录 unstash("target") ansiblePlaybook( playbook: "/data/ansible/playbook/${PLAYBOOK}.yml", extraVars: [ APP_PATH:"${APP_PATH}", HOSTS:"${HOSTS}", PROJECT:"${PROJECT}", WORKSPACE:"${WORKSPACE}", ZIP:"${ZIP}", TIME:"${TIME}" ] ) } } } }

playbook.yml

--- - hosts: "test-pms-all" serial: "50%" tasks: - name: create app dir win_command: CMD /C "md D:\data\apps\{{PROJECT}}" ignore_errors: True - name: create backup dir win_command: CMD /C "md D:\data\backup\{{TIME}}" ignore_errors: True - name: backup website win_copy: src: D:\data\apps\{{PROJECT}} dest: D:\data\backup\{{TIME}} remote_src: True ignore_errors: True - name: transfer artifacts to target hosts win_copy: src: "{{WORKSPACE}}/{{ZIP}}.zip" dest: D:\data\apps\{{PROJECT}}\ - name: unzip artifacts win_unzip: src: D:\data\apps\{{PROJECT}}\target.zip dest: D:\data\apps\{{PROJECT}} creates: no delete_archive: yes - name: restart website win_iis_website: name={{PROJECT}} state=restarted

ansible 使用 wrm 来对 windows 服务器进行操作。
要求:
.NET Framework 3.0 以上
Powershell 3.0 以上
开启 winrm
image.png
image.png
image.png

使用管理员权限打开 Powershell
查看版本

get-host

更改 powershell 策略为 remotesigned

set-executionpolicy remotesigned get-executionpolicy

查看 winrm service listener
https 方式的使用 5986,http 使用 5985

winrm enumerate winrm/config/listener

配置 winrm 服务

winrm quickconfig

配置 auth 为 true(默认为 false)

winrm set winrm/config/service/auth '@{Basic="true"}'

配置允许非加密方式

winrm set winrm/config/service '@{AllowUnencrypted="true"}'

安装 ansible 依赖包 pywinrm 模块

pip install pywinrm

模块路径
image.png
常用模块

win_acl 设置文件/目录属主属组权限; win_copy 拷贝文件到远程Windows主机; win_file 创建,删除文件或目录; win_lineinfile 匹配替换文件内容; win_package 安装/卸载本地或网络软件包; win_ping Windows系统下的ping模块,常用来测试主机是否存活; win_service 管理Windows Services服务; win_user 管理Windows本地用户。

使用方法可以直接阅读源码中的说明

/usr/lib/python2.7/site-packages/ansible-2.4.1.0-py2.7.egg/ansible/modules/windows/

ansible 配置 inventory
用户名密码使用 windows 普通用户账号即可,端口使用之前查到的 5985,注意不是 3389

[test-group] test-01 ansible_host=IP ansible_ssh_port=5985 ansible_ssh_user=USER ansible_ssh_pass=PASSWD ansible_connection=winrm ansible_winrm_server_cert_validation=ignore ansible_winrm_transport=ssl

测试一下

ansbile test-group -m win_ping 返回如下信息则成功 test-group | SUCCESS => { "changed": false, "failed": false, "ping": "pong" }
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    54 引用 • 37 回帖
  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    57 引用 • 25 回帖 • 9 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • flomo

    flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。

    6 引用 • 140 回帖
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 442 关注
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖 • 1 关注
  • 笔记

    好记性不如烂笔头。

    310 引用 • 794 回帖
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 415 关注
  • 分享

    有什么新发现就分享给大家吧!

    247 引用 • 1794 回帖 • 2 关注
  • Anytype
    3 引用 • 31 回帖 • 13 关注
  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    87 引用 • 139 回帖 • 1 关注
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖
  • 创业

    你比 99% 的人都优秀么?

    82 引用 • 1395 回帖
  • 电影

    这是一个不能说的秘密。

    122 引用 • 608 回帖
  • OpenStack

    OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。

    10 引用 • 3 关注
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    107 引用 • 153 回帖
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 99 关注
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    20 引用 • 23 回帖 • 740 关注
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 590 关注
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 7 关注
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 298 关注
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 548 关注
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 79 关注
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 400 关注
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    211 引用 • 358 回帖
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 132 关注
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 233 回帖 • 1 关注
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    125 引用 • 585 回帖 • 1 关注
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    93 引用 • 113 回帖