zoukankan      html  css  js  c++  java
  • jenkins publish .net core application to linux server

    最近学习Docker与Jenkins, 网上大部分都是关于Jenkins+Git+Docker进行持续远程部署, 我一直在考虑为什么Jenkins和Docker要绑定一块使用, 因为我想单独使用Jenkins进行本地构建然后远程部署, 那么这就开始行动.

    准备Linux服务器

    我在Azure创建了一台CentOS7服务器, 开放22端口供SSH使用, 并且开放了5000和5001端口.

    安装DotNet Core

    基于微软官方文档, SSH到服务器使用如下命令安装:

    sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
    sudo yum install dotnet-sdk-3.0
    

    配置Jenkins

    Jenkins的安装请参考我的之前的一篇博文, 在此基础上, 我们安装如下插件:

    • Publish over SSH

    安装完成之后配置相关参数: Manage Jenkins -> Configure System 去配置SSH服务器的参数.

    同时还需要添加环境变量允许本地执行dotnet, 首先输出本地所有环境变量:

    echo $PATH
    

    然后以输出内容为值, 以Path为键, 添加到Global properties -> Environment variables.

    这里有个问题, 我是用密钥链接爆出了如下错误:

    jenkins.plugins.publish_over.BapPublisherException: Failed to add SSH key. Message [invalid privatekey: [B@561b51aa]
    

    网上说是因为密钥版本太高了, 重新产生一个低版本的密钥太麻烦, 没办法, 我只能去Azure设置了用户名和密码, 测试之后连接成功.

    构建项目

    1. 新建一个Freestyle Project, 名字随便起, 然后确定进入配置页.
    2. 在Source Code Management选择git, 并且在Repository URL填入如下地址:
    https://gitee.com/jerryqi/JenkinsTest.git
    
    1. 在Build Environment进行如下操作:

      • 勾选Delete workspace before build starts
      • 勾选Send files or execute commands over SSH after the build runs, 填写信息如下:
      Key Value
      Name 默认选择了你之前配置的Server
      Source files JenkinsTest/bin/Release/netcoreapp3.0/publish/**
      Remove prefix JenkinsTest/bin/Release/netcoreapp3.0/publish
      Exec command dotnet JenkinsTest.dll
    2. 在build选项卡中的Add build step选择Excute shell, 并填入如下脚本:

    dotnet publish -c Release
    

    最后保存

    至此所有工作都以完成, 点击Build Now, 等构建完成, 访问http://serverip:5000, 出现界面即大功告成.

    导出配置文件

    我们一般使用Jenkins-CLI来导出和导入, 这里我只介绍导出.

    下载导出工具

    在Jenkins上,打开Manage Jenkins,打开Jenkins-CLI, 点击get-job, 出现了如下提示:

    java -jar jenkins-cli.jar -s http://localhost:8080/ get-job JOB
    
    Dumps the job definition XML to stdout.
    
     JOB : Name of the job
    

    然后点击jenkins-cli.jar, 下载到本地. 这里我已经把它拷贝进了之前提到的开源项目里面, 因为我要在里面生成导出文件.

    导出

    根据以上提示, 我们可以使用如下命令导出我们的Job:

    java -jar jenkins-cli.jar -s http://localhost:8080/ get-job JenkinsTest
    

    修正

    实际上上述导出是有一定问题的:

    1. 直接执行上述命令是会报错的:
    ERROR: anonymous is missing the Overall/Read permission
    

    很明显这是没有权限的错误, 我们的Jenkins登陆是需要用户名密码的, 所以这里导出时也需要用户名密码:

    java -jar jenkins-cli.jar -s http://localhost:8080/ -auth username:password get-job JenkinsTest
    

    当然如果使用密钥登陆的则使用如下命令:

    java -jar jenkins-cli.jar -s http://localhost:8080/ -i path/to/key.rsa get-job JenkinsTest
    

    具体请参考:https://www.jeffgeerling.com/blog/2018/fixing-jenkins-cli-error-anonymous-missing-overallread-permission
    2. 导出到指定文件的问题:
    通过上述命令运行确实是OK的, 但是结果输出到了控制台, 而我想让他产生一个xml文件, 因此修改命令如下:

    java -jar jenkins-cli.jar -s http://localhost:8080/ -auth username:password get-job JenkinsTest - JenkinsTest.xml
    

    至此大功告成, 产出文件也在上面的开源项目之中: https://gitee.com/jerryqi/JenkinsTest

  • 相关阅读:
    你不是不行只是对自己要求太低
    数学的思维方式
    python文档生成工具:pydoc、sphinx;django如何使用sphinx?
    python抽象类的实现方式:abc模块
    python的重试库tenacity用法以及类似库retry、requests实现
    dict扩展munch,支持yaml文件
    python读取yaml配置文件
    博客园的打赏功能、打赏插件
    junit5了解一下
    sulime代理设置、插件管理
  • 原文地址:https://www.cnblogs.com/jerryqi/p/11785265.html
Copyright © 2011-2022 走看看