热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

jenkins构建netcore程序

一、安装插件    ①、安装gitee插件【本文采用gitee】     ②、安装.NETSDK      ③、设置NET

一、安装插件

       ①、安装gitee插件【本文采用gitee】

         ②、安装.NET SDK

        ③、设置NET SDK插件配置

 

二、创建流水线

       ①、新建流水线

        ②、设置构建信息

        ③、配置构建触发器

        ④、高级设置及流水线脚本

        ⑤、配置流水线【配置Credentials参考】

  

三、创建配置Jenkinsfile

       ①、创建Jenkinsfile【语法参考】

        ②、写入基础配置【测试、编译、发布使用shell脚本】

#流水线【使用需删除注释】
pipeline{

#设置代理【所有】
agent any

#配置工具【使用已安装插件命令】
#如不知使用工具,随便输入工具命令
#错误信息会提示,下文会做具体讲解
tools{
dotnetsdk
"dotnet"
}
#设置参数
parameters {
string(name: 'git_url', defaultValue: 'https://gitee.com/apricots/Apollo.Fast.git', description: '项目git地址')
string(name: 'project_name', defaultValue: 'Apollo.Fast', description: '项目名称')
string(name: 'tag', defaultValue: 'latest', description: '项目标签')
}
#设置流水步骤
stages {
#拉取代码
stage(
'pull code') {
steps{
echo " pull code ~ "
}
}
#自动化测试代码
stage(
'test code') {
steps{
sh "dotnet test ${params.project_name}"
}
}
#编译项目
stage(
'build code') {
steps{
sh "dotnet build ${params.project_name}"
}
}
#发布项目
stage(
'publish code') {
steps{
sh "dotnet publish ${params.project_name}"
}
}
}
}

        ③、生成拉取代码流水线脚本

          (1)、选择版本控制选项:

         (2)、 生成流水线脚本:

        ④、替换拉取脚本

#设置流水步骤
stages {
#拉取代码
stage(
'pull code') {
steps{
#替换拉取脚本
checkout([$class:
'GitSCM', branches: [[name: '*/master']], extensions: []
, userRemoteConfigs: [[credentialsId:
'a6900740-984b-4296-a3ca-26212fe4a210'
, url:
'https://gitee.com/apricots/Apollo.Fast.git']]])
}
}
}

       ⑤、生成测试、编译、发布流水脚本【只做build演示】

         ⑥、添加NET SDK 工具脚本【如不配置会出现下文错误

pipeline{
agent any

#添加工具【如不知使用已装插件、随便填写查看日志,有相关工具提示,文末:错误&处理有详解
tools{
dotnetsdk
"dotnet"
}
parameters {
string(name: 'project_url', defaultValue: 'https://gitee.com/apricots/Apollo.Fast.git', description: '项目git地址')
string(name: 'tag', defaultValue: 'latest', description: 'docker版本标签')

}
stages {

}
}

(1)、错误提示信息

        ⑦、替换测试、编译、发布脚本

#流水线【使用需删除注释】
pipeline{

#设置代理【所有】
agent any

#配置工具【使用已安装插件命令】
#如不知使用工具,随便输入工具命令
#错误信息会提示,下文会做具体讲解
#下文(三 --> ②)
tools{
dotnetsdk
"dotnet"
}
#设置参数
parameters {
string(name: 'git_url', defaultValue: 'https://gitee.com/apricots/Apollo.Fast.git', description: '项目git地址')
string(name: 'project_name', defaultValue: 'Apollo.Fast', description: '项目名称')
string(name: 'tag', defaultValue: 'latest', description: '项目标签')
}
#设置流水步骤
stages {
#拉取代码
stage(
'pull code') {
steps{
checkout([$class:
'GitSCM', branches: [[name: '*/master']]
, extensions: [], userRemoteConfigs: [[credentialsId:
'a6900740-984b-4296-a3ca-26212fe4a210'
, url:
'https://gitee.com/apricots/Apollo.Fast.git']]])
}
}
#自动化测试代码
stage(
'test code') {
steps{
dotnetTest configuration:
'Release', project: "${params.project_name}", showSdkInfo: true
}
}
#编译项目
stage(
'build code') {
steps{
dotnetBuild configuration:
'Release', project: "${params.project_name}", showSdkInfo: true
}
}
#发布项目
stage(
'publish code') {
steps{
dotnetPublish configuration:
'Release', project: "${params.project_name}", showSdkInfo: true
}
}
}
}

       ⑧、完整SDK构建发布脚本

pipeline{
agent any
tools{
dotnetsdk
"dotnet"
}
parameters {
string(name: 'git_url', defaultValue: 'https://gitee.com/apricots/Apollo.Fast.git', description: '项目git地址')
string(name: 'project_name', defaultValue: 'Apollo.Fast', description: 'docker项目名称')
string(name: 'tag', defaultValue: 'latest', description: 'docker版本标签')
}
stages {
stage(
'拉取代码') {
steps{
echo "${params.git_url}"
checkout([$class:
'GitSCM', branches: [[name: '*/master']]
, extensions: [], userRemoteConfigs: [[credentialsId:
'a6900740-984b-4296-a3ca-26212fe4a210'
, url:
'https://gitee.com/apricots/Apollo.Fast.git']]])
}
}
stage(
'自动化测试') {
steps{
dotnetTest project:
"${params.project_name}", showSdkInfo: true
}
}
stage(
'编译项目') {
steps{
dotnetBuild configuration:
'Release', project: "${params.project_name}", showSdkInfo: true
}
}
stage(
'发布项目') {
steps{
dotnetPublish project:
"${params.project_name}", selfContained: false, showSdkInfo: true
}
}
}
}

        ⑨、完整shell脚本构建发布脚本

pipeline{
agent any
tools{
dotnetsdk
"dotnet"
}
parameters {
string(name: 'git_url', defaultValue: 'https://gitee.com/apricots/Apollo.Fast.git', description: '项目git地址')
string(name: 'project_name', defaultValue: 'Apollo.Fast', description: 'docker项目名称')
string(name: 'tag', defaultValue: 'latest', description: 'docker版本标签')
}
stages {
stage(
'拉取代码') {
steps{
echo "${params.git_url}"
checkout([$class:
'GitSCM', branches: [[name: '*/master']]
, extensions: [], userRemoteConfigs: [[credentialsId:
'a6900740-984b-4296-a3ca-26212fe4a210'
, url:
'https://gitee.com/apricots/Apollo.Fast.git']]])
}
}
stage(
'自动化测试') {
steps{
sh "dotnet test ${params.project_name}"
}
}
stage(
'编译项目') {
steps{
sh "dotnet build ${params.project_name}"
}
}
stage(
'发布项目') {
steps{
sh "dotnet publish ${params.project_name}"
}
}
}
}

       ⑩、构建项目

 

 四、问题&处理

       ①、缺少ICU包

         (1)、错误信息:

+ dotnet test apricot.net
Process terminated. Couldn
't find a valid ICU package installed on the system. Please install libicu using your package manager and try again.
Alternatively you can set the configuration flag System.Globalization.Invariant to true if you want to run with no globalization support.
Please see https://aka.ms/dotnet-missing-libicu for more information.

at System.Environment.FailFast(System.String)
at System.Globalization.GlobalizationMode
+Settings..cctor()
at System.Globalization.CultureData.CreateCultureWithInvariantData()
at System.Globalization.CultureData.get_Invariant()
at System.Globalization.CultureInfo..cctor()
at System.Globalization.CultureInfo.get_CurrentUICulture()
at System.TimeZoneInfo.GetUtcStandardDisplayName()
at System.TimeZoneInfo.CreateUtcTimeZone()
at System.TimeZoneInfo..cctor()
at System.DateTime.get_Now()
at Microsoft.DotNet.Cli.Program.Main(System.String[])

        (2) 错误截图:

         解决:

          (1)、添加环境变量

#linux
root@ecs
-16640:~# export DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1
#jenkins 修改数据卷【对应容器:
/var/jenkins_home/config.xml】
root@ecs
-16640:~# cat /opt/jenkins/jenkins_home/config.xml
#找到节点

#添加节点
<string>DOTNET_SYSTEM_GLOBALIZATION_INVARIANTstring>
<string>1string>

         (2)、jenkins界面配置:

      (2)、项目文件配置:

#Apollo.Fast.csproj 添加配置节点


true

         ②、查看插件工具使用

       ③、未配置插件【参考(一 -->①)】

 

五、参考

       ①、项目地址

       ②、zoukankan【ICU处理】

          



推荐阅读
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Python实现变声器功能(萝莉音御姐音)的方法及步骤
    本文介绍了使用Python实现变声器功能(萝莉音御姐音)的方法及步骤。首先登录百度AL开发平台,选择语音合成,创建应用并填写应用信息,获取Appid、API Key和Secret Key。然后安装pythonsdk,可以通过pip install baidu-aip或python setup.py install进行安装。最后,书写代码实现变声器功能,使用AipSpeech库进行语音合成,可以设置音量等参数。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 本文介绍了如何将CIM_DateTime解析为.Net DateTime,并分享了解析过程中可能遇到的问题和解决方法。通过使用DateTime.ParseExact方法和适当的格式字符串,可以成功解析CIM_DateTime字符串。同时还提供了关于WMI和字符串格式的相关信息。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文讨论了在Spring 3.1中,数据源未能自动连接到@Configuration类的错误原因,并提供了解决方法。作者发现了错误的原因,并在代码中手动定义了PersistenceAnnotationBeanPostProcessor。作者删除了该定义后,问题得到解决。此外,作者还指出了默认的PersistenceAnnotationBeanPostProcessor的注册方式,并提供了自定义该bean定义的方法。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
author-avatar
苏黎世的风景
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有