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

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

使用 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
常用模块


                
  • Jenkins

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

    54 引用 • 37 回帖
  • DevOps

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

    54 引用 • 25 回帖 • 7 关注

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • Word
    13 引用 • 40 回帖 • 1 关注
  • Excel
    31 引用 • 28 回帖
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    186 引用 • 318 回帖 • 264 关注
  • 人工智能

    人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。

    142 引用 • 209 回帖
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 494 关注
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    28 引用 • 225 回帖 • 137 关注
  • 浅吟主题

    Jeffrey Chen 制作的思源笔记主题,项目仓库:https://github.com/TCOTC/Whisper

    1 引用 • 22 回帖
  • Flume

    Flume 是一套分布式的、可靠的,可用于有效地收集、聚合和搬运大量日志数据的服务架构。

    9 引用 • 6 回帖 • 649 关注
  • gRpc
    11 引用 • 9 回帖 • 82 关注
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 30 关注
  • QQ

    1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。

    45 引用 • 557 回帖
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 269 回帖 • 2 关注
  • HHKB

    HHKB 是富士通的 Happy Hacking 系列电容键盘。电容键盘即无接点静电电容式键盘(Capacitive Keyboard)。

    5 引用 • 74 回帖 • 483 关注
  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    409 引用 • 3578 回帖
  • Anytype
    3 引用 • 31 回帖 • 11 关注
  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    36 引用 • 155 回帖
  • IBM

    IBM(国际商业机器公司)或万国商业机器公司,简称 IBM(International Business Machines Corporation),总公司在纽约州阿蒙克市。1911 年托马斯·沃森创立于美国,是全球最大的信息技术和业务解决方案公司,拥有全球雇员 30 多万人,业务遍及 160 多个国家和地区。

    17 引用 • 53 回帖 • 147 关注
  • Office

    Office 现已更名为 Microsoft 365. Microsoft 365 将高级 Office 应用(如 Word、Excel 和 PowerPoint)与 1 TB 的 OneDrive 云存储空间、高级安全性等结合在一起,可帮助你在任何设备上完成操作。

    5 引用 • 34 回帖
  • uTools

    uTools 是一个极简、插件化、跨平台的现代桌面软件。通过自由选配丰富的插件,打造你得心应手的工具集合。

    6 引用 • 14 回帖 • 1 关注
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    20 引用 • 37 回帖 • 560 关注
  • FFmpeg

    FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

    23 引用 • 32 回帖 • 2 关注
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 653 关注
  • 反馈

    Communication channel for makers and users.

    124 引用 • 928 回帖 • 259 关注
  • frp

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。

    20 引用 • 7 回帖 • 1 关注
  • AWS
    11 引用 • 28 回帖 • 3 关注
  • AngularJS

    AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。

    12 引用 • 50 回帖 • 483 关注
  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    245 引用 • 1338 回帖 • 2 关注