Jenkins持续集成

Stella981
• 阅读 693

点击箭头处“蓝色字”,关注我们哦!!


本文探究在.net环境下的持续集成环境研究并使用。

目标

学习jenkins的基本使用,完成以下2点任务。

  1. 搭建jenkins任务完成自动编译。

  2. 自动从nuget上获取需要的包。

使用Jenkins

安装

到Jenkins官网下载安装包,进行安装。安装完成后会自动打开一个页面。默认是网站是localhost:8080。若端口已被占用则需要修改成别的端口。
具体安装问题可以看这里浅谈.net jenkins svn下自动化集成环境安装 搭建 配置
主要是安装完后需要安装.net的环境的一些插件及svn(或git)等相关插件。

根据官网描述是需要安装java环境的

添加.net环境配置

安装完后如果要在.net环境使用,在MSBuild插件安装完的前提下。配置msbuild.exe的路径。这样jenkins就能通过msbuild来编译.net项目了。具体配置可以可以参考《为 Jenkins 配置 .NET 持续集成环境》

我本地的jenkins的全局配置配的MSBuild也为14.0

安装了不同版本的VS的MSBuild版本可能不一样。

Jenkins持续集成

部署

我们通过VS先新建一个控制台项目.net framework4.5的项目,项目名称叫做JenkinsTest。在Program.cs中简单的输出hello world

static void Main(string[] args){    Console.WriteLine("Hello World!");}

程序目录如下

│  JenkinsTest.sln│└─JenkinsTest    │  App.config    │  JenkinsTest.csproj    │  Program.cs    │    └─Properties            AssemblyInfo.cs

编译通过后将项目上传到SVN上,我在我本地建了SVN的服务,并增加了用户名和密码分别为test。

Jenkins持续集成

新建项目

Jenkins持续集成
创建一个名为test的自由风格软件项目。
Jenkins持续集成
我本地使用的是SVN,因此选择Subversion,输入SVN的路径。Local module directory为SVN获取代码的路径。.表示获取到jenkins的根目录下。
Jenkins持续集成
首次创建的时候需要创建SVN的登录凭据,在Credentials项点击Add添加一个新的凭据,类型就选择Username with password即可,id需要输入一个唯一凭据标识。
Jenkins持续集成
Build Environment下勾选Add timestamps to the Console Output,这样可以显示时间戳。
Jenkins持续集成
Build选择MSBuild的版本,这个版本在全局配置设置过,在这里就可以显示出来。MSBuild Build File输入需要编译的程序集文件名。在Command Line Arguments输入编译的参数,我们编译成Realse版本。完成后点击保存即可。具体MSBuild指令不做具体探究,有什么问题直接可以看官方文档
点击立即构建就会自动编译,完成就会显示一个结果
Jenkins持续集成
Jenkins持续集成
点击#1即可调转到该次编译的详细信息中,在左侧点击Console Output可以看到编译的过程日志。
Jenkins持续集成

构建过程分析
  1. 先从SVN获取代码

    16:21:55 由用户 jake 启动16:21:55 构建中 在工作空间 D:\Program Files (x86)\Jenkins\workspace\test 中16:21:55 Updating https://jakepc/svn/JenkinsTest/trunk/JenkinsTest at revision '2019-01-18T16:21:55.792 +0800' --quiet16:21:55 Using sole credentials test/****** (本地svn服务器) in realm ‘<https://jakepc:443> VisualSVN Server’16:21:55 At revision 3
    
  2. 调用MSBuild命令进行编译,这里会查找我们全局配置的MSBuild.exe执行我们在创建时输入的Command Line Arguments指令。

    16:21:56 Path To MSBuild.exe: C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe16:21:56 Executing the command cmd.exe /C " "C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" /t:Build /p:Configuration=Release JenkinsTest.csproj " && exit %%ERRORLEVEL%% from D:\Program Files (x86)\Jenkins\workspace\test16:21:56 [test] $ cmd.exe /C " "C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" /t:Build /p:Configuration=Release JenkinsTest.csproj " && exit %%ERRORLEVEL%%
    
  3. 编译完成,显示警告,错误和结果

    ...16:21:57 _CopyAppConfigFile:16:21:57   正在将文件从“App.config”复制到“bin\Release\JenkinsTest.exe.config”。16:21:57 CopyFilesToOutputDirectory:16:21:57   正在将文件从“obj\Release\JenkinsTest.exe”复制到“bin\Release\JenkinsTest.exe”。16:21:57   JenkinsTest -> D:\Program Files (x86)\Jenkins\workspace\test\bin\Release\JenkinsTest.exe16:21:57   正在将文件从“obj\Release\JenkinsTest.pdb”复制到“bin\Release\JenkinsTest.pdb”。16:21:57 已完成生成项目“D:\Program Files (x86)\Jenkins\workspace\test\JenkinsTest.csproj”(Build 个目标)的操作。16:21:5716:21:57 已成功生成。16:21:57     0 个警告16:21:57     0 个错误16:21:5716:21:57 已用时间 00:00:01.2216:21:59 Finished: SUCCESS
    

通过以上三步骤,实际和我们自己使用VS编译过程也是一样的。

增加依赖dll

上面我们创建了一个最简单的项目,并通过jenkins获取并编译成功了,下面我们增加项目复杂性,增加其他依赖项。

新建一个jenkins.Common的类库。我们把HelloWorld的字符串通过该类库获取到,然后主项目进行输出。
增加HelloWolrdHelper类获取字符串

public class HelloWolrdHelper{    public static string GetString()    {        return "Hello World!";    }}

修改原项目

static void Main(string[] args){    Console.WriteLine(HelloWolrdHelper.GetString());    Console.ReadKey();}

Jenkins持续集成

然后提交代码到SVN后在jenkins再次构建,结构如下。

│  JenkinsTest.sln│├─Jenkins.Common│  │  HelloWolrdHelper.cs│  │  Jenkins.Common.csproj│  ││  └─Properties│          AssemblyInfo.cs│└─JenkinsTest    │  App.config    │  JenkinsTest.csproj    │  Program.cs    │    └─Properties            AssemblyInfo.cs

构建一下,编译成功了,MSBuild会根据csproj文件内的依赖关系编译其他程序集。
Jenkins持续集成

生成启动时间为 2019/1/18 17:16:03。17:16:03 项目“D:\Program Files (x86)\Jenkins\workspace\test\JenkinsTest\JenkinsTest.csproj”在节点 1 上(Build 个目标)。17:16:03 PrepareForBuild:17:16:03   正在创建目录“bin\Release\”。17:16:03   正在创建目录“obj\Release\”。17:16:03 项目“D:\Program Files (x86)\Jenkins\workspace\test\JenkinsTest\JenkinsTest.csproj”(1)正在节点 1 上生成“D:\Program Files (x86)\Jenkins\workspace\test\Jenkins.Common\Jenkins.Common.csproj”(2) (默认目标)。17:16:03 PrepareForBuild:17:16:03   正在创建目录“bin\Release\”。17:16:03   正在创建目录“obj\Release\”。17:16:03 GenerateTargetFrameworkMonikerAttribute:17:16:03 正在跳过目标“GenerateTargetFrameworkMonikerAttribute”,因为所有输出文件相对于输入文件而言都是最新的。

增加Nuget依赖

新建一个Jenkins.Core项目,并生成Nuget包上传到Nuget服务器上。

关于Nuget如何打包可以看我之前的博客NuGet的使用、部署、搭建私有服务,这里不做讨论。

为了简单起见,创建一个和Jenkins.Common程序集一样的输出HelloWorld的方法,但是为了作为区分,分别略作修改。
Jenkins.Common的代码

public class HelloWolrdHelper{    public static string GetString()    {        return "Hello World! Jenkins.Common";    }}

Jenkins.Core的代码

public class HelloWolrdHelper{    public static string GetString()    {        return "Hello World! Jenkins.Core";    }}

程序结构如下

│  JenkinsTest.sln│├─.nuget│      NuGet.Config│      NuGet.exe│      NuGet.targets│├─Jenkins.Common│  │  HelloWolrdHelper.cs│  │  Jenkins.Common.csproj│  ││  └─Properties│          AssemblyInfo.cs│├─Jenkins.Core│  │  HelloWorldHelper.cs│  │  Jenkins.Core.csproj│  │  Jenkins.Core.sln│  ││  └─Properties│          AssemblyInfo.cs│└─JenkinsTest   │  App.config   │  JenkinsTest.csproj   │  packages.config   │  Program.cs   │   └─Properties           AssemblyInfo.cs

注意:Jenkins.Core我放到一个单独的项目中打包的。原本我是放到原项目一起。但是Nuget似乎有个bug,导致编译通不过。

Jenkins持续集成

因为控制台项目更新的时候会向JenkinsTest.csproj文件写入nuget包还原的指令

<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">    <PropertyGroup>      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>    </PropertyGroup>    <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />  </Target>

而中解决方案的目录是在上一层目录<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>,最终编译的时候会校验pacakges是否存在已下载的包。通过路径$(SolutionDir)\packages\下查找,即..\\packages\。多了一个\导致存在包仍然报错查找不到,最终编译不过。

上传nuget包

Jenkins持续集成

然后从Nuget本地nuget服务器上获取。

Jenkins持续集成

Program的代码增加新的helloworld输出

class Program{    static void Main(string[] args)    {        Console.WriteLine(HelloWolrdHelper.GetString());        Console.WriteLine(Jenkins.Core.HelloWolrdHelper.GetString());        Console.ReadKey();    }}

重新编译项目后上传代码到SVN后再次到Jenkins上构建项目。

Jenkins持续集成

可以看到构建失败了,去看下具体失败原因。

正在将文件从“obj\Release\Jenkins.Common.pdb”复制到“bin\Release\Jenkins.Common.pdb”。12:51:14 已完成生成项目“D:\Program Files (x86)\Jenkins\workspace\test\Jenkins.Common\Jenkins.Common.csproj”(默认目标)的操作。12:51:14 ResolveAssemblyReferences:12:51:14   主引用“Jenkins.Core, Version=0.2.0.0, Culture=neutral, processorArchitecture=MSIL”。12:51:14 C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(1820,5): warning MSB3245: 未能解析此引用。未能找到程序集“Jenkins.Core, Version=0.2.0.0, Culture=neutral, processorArchitecture=MSIL”。请检查磁盘上是否存在该程序集。如果您的代码需要此引用,则可能出现编译错误。[D:\Program Files (x86)\Jenkins\workspace\test\JenkinsTest\JenkinsTest.csproj]12:51:14           用于 SearchPath“{HintPathFromItem}”。12:51:14           已考虑使用“..\packages\Jenkins.Core.0.2.0\lib\net45\Jenkins.Core.dll”,但它不存在。12:51:14           用于 SearchPath“{TargetFrameworkDirectory}”。12:51:14           已考虑使用“C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Jenkins.Core.winmd”,但它不存在。12:51:14           已考虑使用“C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Jenkins.Core.dll”,但它不存在...12:51:14 Program.cs(15,22): error CS0234: The type or namespace name 'Core' does not exist in the namespace 'Jenkins' (are you missing an assembly reference?) [D:\Program Files (x86)\Jenkins\workspace\test\JenkinsTest\JenkinsTest.csproj]12:51:14 已完成生成项目“D:\Program Files (x86)\Jenkins\workspace\test\JenkinsTest\JenkinsTest.csproj”(Build 个目标)的操作 - 失败。12:51:1512:51:15 生成失败。12:51:1512:51:15 “D:\Program Files (x86)\Jenkins\workspace\test\JenkinsTest\JenkinsTest.csproj”(Build 目标) (1) ->12:51:15 (ResolveAssemblyReferences 目标) -> 12:51:15   C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(1820,5): warning MSB3245: 未能解析此引用。未能找到程序集“Jenkins.Core, Version=0.2.0.0, Culture=neutral, processorArchitecture=MSIL”。请检查磁盘上是否存在该程序集。如果您的代码需要此引用,则可能出现编译错误。[D:\Program Files (x86)\Jenkins\workspace\test\JenkinsTest\JenkinsTest.csproj]12:51:1512:51:1512:51:15 “D:\Program Files (x86)\Jenkins\workspace\test\JenkinsTest\JenkinsTest.csproj”(Build 目标) (1) ->12:51:15 (CoreCompile 目标) -> 12:51:15   Program.cs(15,22): error CS0234: The type or namespace name 'Core' does not exist in the namespace 'Jenkins' (are you missing an assembly reference?) [D:\Program Files (x86)\Jenkins\workspace\test\JenkinsTest\JenkinsTest.csproj]12:51:1512:51:15     1 个警告12:51:15     1 个错误12:51:1512:51:15 已用时间 00:00:01.4312:51:15 Build step 'Build a Visual Studio project or solution using MSBuild' marked build as failure12:51:16 Finished: FAILURE

一开始会去..\packages\Jenkins.Core.0.2.0\lib\net45\Jenkins.Core.dll获取,但是因为没有包,后面就去遍历其他目录获取,最终都没有找到包导致编译失败。因此我们需要使用nuget,在MSBuild编译之前将包下载下来。

为了方便我将nuget一同上传到SVN上,SVN的程序目录如下

│  JenkinsTest.sln│├─.nuget│      NuGet.Config│      NuGet.exe│      NuGet.targets│├─Jenkins.Common│  │  HelloWolrdHelper.cs│  │  Jenkins.Common.csproj│  ││  └─Properties│          AssemblyInfo.cs│└─JenkinsTest   │  App.config   │  JenkinsTest.csproj   │  packages.config   │  Program.cs   └─Properties           AssemblyInfo.cs

由于Jenkins.Core可以理解为第三方依赖,不是和JenkinsTest放一起。

在Build配置中新增一项批处理命令,执行nuget包还原。如图拖动到编译之前。
Jenkins持续集成

根据我们目录结构调用".nuget/nuget.exe" restore JenkinsTest.sln命令使用nuget进行包还原。

由于.nuget目录带有.因此需要用双引号引起来执行。

再次编译仍然失败了。可以通过日志看到已经在编译前已经执行了脚本,但是没有从我们想要的地方获取包。

13:26:47 No changes for https://jakepc/svn/JenkinsTest/trunk/JenkinsTest since the previous build13:26:47 [test] $ cmd /c call C:\WINDOWS\TEMP\jenkins8156278399083484284.bat13:26:4713:26:47 D:\Program Files (x86)\Jenkins\workspace\test>".nuget/nuget.exe" restore JenkinsTest.sln13:26:47 MSBuild auto-detection: using msbuild version '15.9.21.664' from 'D:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\bin'.13:26:48 Restoring NuGet package Jenkins.Core.0.2.0.13:26:49   GET https://api.nuget.org/v3-flatcontainer/jenkins.core/0.2.0/jenkins.core.0.2.0.nupkg13:26:49   NotFound https://api.nuget.org/v3-flatcontainer/jenkins.core/0.2.0/jenkins.core.0.2.0.nupkg 191ms13:26:49 警告: Unable to find version '0.2.0' of package 'Jenkins.Core'.13:26:49   C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\: Package 'Jenkins.Core.0.2.0' is not found on source 'C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\'.13:26:49   https://api.nuget.org/v3/index.json: Package 'Jenkins.Core.0.2.0' is not found on source 'https://api.nuget.org/v3/index.json'.13:26:4913:26:49 警告: Unable to find version '0.2.0' of package 'Jenkins.Core'.13:26:49   C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\: Package 'Jenkins.Core.0.2.0' is not found on source 'C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\'.13:26:49   https://api.nuget.org/v3/index.json: Package 'Jenkins.Core.0.2.0' is not found on source 'https://api.nuget.org/v3/index.json'.13:26:4913:26:4913:26:49 Errors in packages.config projects13:26:49     Unable to find version '0.2.0' of package 'Jenkins.Core'.13:26:49       C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\: Package 'Jenkins.Core.0.2.0' is not found on source 'C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\'.13:26:49       https://api.nuget.org/v3/index.json: Package 'Jenkins.Core.0.2.0' is not found on source 'https://api.nuget.org/v3/index.json'.13:26:4913:26:49 NuGet Config files used:13:26:49     D:\Program Files (x86)\Jenkins\workspace\test\.nuget\NuGet.Config13:26:49     C:\WINDOWS\system32\config\systemprofile\AppData\Roaming\NuGet\NuGet.Config13:26:49     C:\Program Files (x86)\NuGet\Config\Microsoft.VisualStudio.Offline.config13:26:4913:26:49 Feeds used:13:26:49     https://api.nuget.org/v3/index.json13:26:49     C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\13:26:4913:26:49 D:\Program Files (x86)\Jenkins\workspace\test>exit 113:26:49 Build step '执行 Windows 批处理命令' marked build as failure13:26:50 Finished: FAILURE
指定nuget包下载源地址。

找到Nuget.exe的配置Nuget.Config,在configuration节点内增加packageSources节点。

<packageSources>    <add key="Jake Package source" value="http://127.0.0.1:10080/nuget" />  </packageSources>

再次编译,终于编译成功了,日志如下。

13:38:08 No changes for https://jakepc/svn/JenkinsTest/trunk/JenkinsTest since the previous build13:38:08 [test] $ cmd /c call C:\WINDOWS\TEMP\jenkins5326599668058283263.bat13:38:0813:38:08 D:\Program Files (x86)\Jenkins\workspace\test>".nuget/nuget.exe" restore JenkinsTest.sln13:38:08 MSBuild auto-detection: using msbuild version '15.9.21.664' from 'D:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\bin'.13:38:09 Restoring NuGet package Jenkins.Core.0.2.0.13:38:09 Adding package 'Jenkins.Core.0.2.0' to folder 'D:\Program Files (x86)\Jenkins\workspace\test\packages'13:38:09 Added package 'Jenkins.Core.0.2.0' to folder 'D:\Program Files (x86)\Jenkins\workspace\test\packages'13:38:0913:38:09 NuGet Config files used:13:38:09     D:\Program Files (x86)\Jenkins\workspace\test\.nuget\NuGet.Config13:38:09     C:\WINDOWS\system32\config\systemprofile\AppData\Roaming\NuGet\NuGet.Config13:38:09     C:\Program Files (x86)\NuGet\Config\Microsoft.VisualStudio.Offline.config13:38:0913:38:09 Feeds used:13:38:09     C:\WINDOWS\system32\config\systemprofile\.nuget\packages\13:38:09     http://127.0.0.1:10080/nuget13:38:09     https://api.nuget.org/v3/index.json13:38:09     C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\13:38:0913:38:09 Installed:13:38:09     1 package(s) to packages.config projects13:38:0913:38:09 D:\Program Files (x86)\Jenkins\workspace\test>exit 013:38:09 Path To MSBuild.exe: C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe13:38:09 Executing the command cmd.exe /C " "C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" /t:Build /p:Configuration=Release JenkinsTest/JenkinsTest.csproj " && exit %%ERRORLEVEL%% from D:\Program Files (x86)\Jenkins\workspace\test13:38:09 [test] $ cmd.exe /C " "C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" /t:Build /p:Configuration=Release JenkinsTest/JenkinsTest.csproj " && exit %%ERRORLEVEL%%

结语

通过N次尝试,最终完成了.Net开发下Jenkins进行持续集成。总结起来如下:

  1. 安装Java环境,由于我本地已有java环境,因此该步骤跳过。

  2. 安装MSBuild,由于我本地已安装过VS,因此该步骤跳过。

  3. 下载Nuget,由于我本地已安装VS,同时已安装过Nuget,因此该步骤跳过。

  4. 安装Jenkins,并安装MSbuild插件。

  5. 修改Jenkins的MSBuild插件的配置。

  6. 新建一个工程,修改配置

  • 选择源码管理,我本地是SVN,因此选择SVN(增加登录凭据)

  • 增加windows批处理脚本用于Nuget下载库包。(在Nuget.Config中增加自己的包服务地址)

  • 增加MSBuild编译VS的项目

通过以上步骤,基本就完成了自动编译的功能。但是光编译还是不够的,最终还要完成自动跑单元测试,下一篇博客再进行研究。

参考文档

  1. Jenkins部署.net自动化构建

  2. 为 Jenkins 配置 .NET 持续集成环境

  3. 浅谈.net jenkins svn下自动化集成环境安装 搭建 配置

  4. jenkins持续集成原理

  5. Jenkins结合.net平台工具之Nuget

  6. Make Jenkins aware of custom NuGet Package Source

长按二维码

关注我们

Jenkins持续集成

来都来了,点个在看再走吧~~~

Jenkins持续集成

本文分享自微信公众号 - 杰哥技术分享(gh_930a7a5546eb)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这