Jenkins之Windows中构建Core项目

2021/10/7 7:11:22

本文主要是介绍Jenkins之Windows中构建Core项目,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

    • 一、配置项目
      • 1、新建项
      • 2、添加任务名
      • 3、选择自由风格
        • 3.1、添加任务基本信息
        • 3.2、源码管理
        • 3.3、添加仓库地址
        • 3.4、添加仓库凭证
          • 方式一、用户名和用户密码
          • 方式二、使用`ssh key`
        • 3.5、环境构建
        • 3.6、构建
        • 3.7、测试指令
      • 4、`ssh` 远程发布
        • 4.1、安装插件
        • 4.2、系统配置
          • 高级配置
        • 4.3、项目添加配置
          • 默认用户目录
          • 非默认目录
    • 二、参考链接

Jenkins-Header

一、配置项目

1、新建项

Jenkins-additem

2、添加任务名

Jenkins-addproject

3、选择自由风格

3.1、添加任务基本信息

Jenkins-projectdescript

3.2、源码管理

如果明白对应源码管理的用途,可以选择点击,截图中的帮助图标,有对应层级的基本信息描述。

Jenkins-projectgit

选择 Git

Jenkins-projecthelp

3.3、添加仓库地址

本地创建一个Asp.net Core WebApi项目,并添加到源码代码管理中,并推送到远程仓库中,获取git地址https://gitee.com/guanguanchangyu/EXEGGCY.git,添加到项目中,出现如下提示:

Failed to connect to repository : Command "git.exe ls-remote -h -- https://gitee.com/guanguanchangyu/EXEGGCY.git HEAD" returned status code 128:
stdout:
stderr: Logon failed, use ctrl+c to cancel basic credential prompt.
remote: [31mUsername for 'https: Incorrect username or password (access token)[0m
fatal: Authentication failed for 'https://gitee.com/guanguanchangyu/EXEGGCY.git/'

3.4、添加仓库凭证

方式一、用户名和用户密码

Jenkins-addgituser

具体填写内容

Jenkins-adduserinfo

选择凭证,如果账户的用户名和密码输入正确,源码管理仓库将不在提示上述错误信息

Jenkins-chosegituser

方式二、使用ssh key

本地通过ssh-keyagen生成证书公钥私钥后,将本地生成的公钥,添加到线上的个人公钥仓库公钥中,细节操作自行搜索,添加成功后,本地在对应的项目中配置的源码管理部分进行操作处理,选择凭证添加

Jenkins-addsshkey.png

用户名和标识按实际需要进行填写,不用非得和git的账户一致

Jenkins-addsshprivate

add添加的是本地生成的私钥内容

如果构建凭证时设置了密码,则需要在Passphrase输入框中添加对应的密码,保存成功之后,就可以进行选择

注意:对于gitee来说,目前默认不支持(2021-8-18)建立的私有仓库由jenkins使用ssh key方式进行远程访问

个人私有创建的gitea可以正常使用,特此提示,避免读者躺坑。

3.5、环境构建

当前项目为Core项目并未涉及。

3.6、构建

Jenkins-addbuild

输入如下指令:

dotnet restore
dotnet build

如下图:

Jenkins-buildbat

3.7、测试指令

保存配置,跳转到当前任务首页,选择Build Now进行指令测试

Jenkins-projectindex

查看构建历史

Jenkins-projectbuildhistory

点击最新记录,查看详情

Jenkins-buildrecorddetails

查看控制台输出,可以看到当前输出页面和实际日常开发过程中,指定dotnet指令进行项目的restorebuild基本保持一致

Jenkins-buildconsole

那是否也存在对应的项目工作目录?

是的,该工作目录,在任务信息首页中,叫做工作空间,也就是上图控制台输出的执行路径,在项目首页中可以进行查看

Jenkins-workspack

C:\Windows\system32\config\systemprofile\AppData\Local\Jenkins\.jenkins\workspace\ynkenginemap就是将远程仓库克隆下来的本地目录,打开对应目录如下:

Jenkins-gitlocal

运行过程中,执行的指令都在当前目录下执行,那发布项目也同样如此。

执行指令dotnet publish,参考:指令信息,此处直接切换目录到JenkinsDemo下,执行发布指令,发布文件默认输出到bin\Debug\netcoreapp3.1\publish

Jenkins-publish

保存后,查看运行测试效果:

Jenkins-runpublish.png

运行成功后,查看工作空间,以下表示项目已经正常生成。

Jenkins-viewpublish

4、ssh 远程发布

4.1、安装插件

通过ssh访问远程主机,需要为Windows系统的主机安装Open SSH,防火墙开放22端口,本地Jenkins安装插件安装publish over ssh插件,安装后重启Jenkins服务。

Jenkins-addsshplugin

查看任务中构建后操作,可以看到多出选项Send build artifacts over SSH选项,则表明安装成功。

Jenkins-usesshplugin

需要的配置相关配置,如果用户为首次使用,则需要转到首页,选择 系统配置添加对应的 SSH 发布配置,首页如下:

Jenkins-configuration-home

4.2、系统配置

System Configuration-Configure System-Publish over SSH中,配置一个远程ssh连接配置,

Jenkins-configurassh

各个输入框,用途如下:

Passphtase 对应用户私钥的文件加密秘钥,默认可以是空,依据实际情况考虑是否填写。
Path to key 用户实际私钥所在文件的绝对或者相对路径,与 Key 考虑二者选择一个即可。
Key 用户私钥对应的实际内容,与 Path to key 二者选择一个即可。

配置 SSH 服务地址:

Jenkins-sshremote

输入框内容用途如下:

Name 当前 SSH 服务端配置记录的名称,用于做为记录的唯一辨识,尽量不要重名。
Hostname  一般为服务端所属的 IP,其他端口需要通过 高级配置级进行指定。
Username  远程访问服务器时,提供的访问用户名,一般为服务端提前配置好的用户名。
Remote Directory 远程访问时,非默认访问路径时,需要用户依据实际需求进行指定(Windows仅仅适用于当前盘符)。

确认配置无误后,点击 Test Configuration 按钮进行测试。配置成功,测如上图返回结果为 Success 字样。

高级配置

高级配置中,支持通过用户名和密码进行远程访问,同时包含,需要访问的服务端ssh 端口为非22端口时的相关配置,以及代理相关配置操作输入项,此处不一一展开讨论。

jenkins-addsshkey-gj

SSH Server 配置无误后,点击保存即可。

4.3、项目添加配置

回到目标项目中,点击构建后项目,选择Send build artifacts over SSH 选项,效果如下:

Jenkins-addsshbuild

上述转换 Transfers 输入内容用途如下:

Source files 需要上传的文件,可以使用匹配符号,具体查看官方文档。
Remove prefix 上传是需要移除的文件前缀,避免拷贝文件时,在服务端生成同样目录层级。
Remote directory 上传到远程服务器对应文件目录。
Exec command  用于在执行转换后,进行后续的指令操作,方便后续构建的处理操作。

其中可以使用,Jenkins environment variables,具体可以查看本地地址 http://localhost:8060/env-vars.html/,读者依据实际的部署端口,进行相关环境变量的查看。参考链接:https://plugins.jenkins.io/publish-over-ssh/

高级配置中,可以添加需要排除的文件,用于在转换过程中,排除上传的文件,** 表示全文本匹配。

Jenkins-excudefile

笔者案例,填写如下:

Jenkins-publish-ssh-case01

确认无后,点击保存。回到项目页面,进行立即构建,查看项目控制台输出如下:

# 省略以上内容
C:\Windows\System32\config\systemprofile\AppData\Local\Jenkins\.jenkins\workspace\ynkenginemap\JenkinsDemo>exit 0 
SSH: Connecting from host [LAPTOP-86GF4FKI]
SSH: Connecting with configuration [localserver] ...
SSH: Disconnecting configuration [localserver] ...
SSH: Transferred 7 file(s)
Finished: SUCCESS

通过 xshell 可以看到对应工作目录中,已经生成一个 jenkins 的文件目录,文件目录中,包含对应本地发布的项目文件。

C:\Users\ggcyuser>dir jenkins                                                                          
 驱动器 C 中的卷是 Windows                                                                            
 卷的序列号是 22DB-1BE1                                                                               
                                                                                                      
 C:\Users\ggcyuser\jenkins 的目录                                                                     
                                                                                                      
2021/10/06  20:35    <DIR>          .                                                                 
2021/10/06  20:35    <DIR>          ..                                                                
2021/10/06  20:35               168 appsettings.Development.json                                      
2021/10/06  20:35           106,809 JenkinsDemo.deps.json                                             
2021/10/06  20:35             9,216 JenkinsDemo.dll                                                   
2021/10/06  20:35           174,592 JenkinsDemo.exe                                                   
2021/10/06  20:35            20,016 JenkinsDemo.pdb                                                   
2021/10/06  20:35               311 JenkinsDemo.runtimeconfig.json                                    
2021/10/06  20:35               555 web.config                                                        
               7 个文件        311,667 字节                                                           
               2 个目录 34,109,632,512 可用字节

此时,可能读者就会问,那如果需要远程访问的文件目录,并不是当前账户所在的根目录如何处理?

其实对于这个问题,分情况处理,主要针对远程账户默认用户目录与非默认目录。

默认用户目录

默认空间下的子级目录切换可以通过配置的 SSH Servers 进行处理,在配置 SSH Servers 就提到过如下输入字段:

Remote Directory 远程访问时,非默认访问路径时,需要用户依据实际需求进行指定(Windows仅仅适用于当前盘符)。

如果用户有实际需求,可以在当前字段中进行特定目录的目录配置,需要注意的是,目前笔者测试结果为通过 SSH Server 方式仅仅适用于当前Windows服务端的所在盘符,跨盘符操作不支持。

此处为了方便,笔者选择非默认目录,设置为服务器中的目录 jenkins,配置一个新的 SSH Severs,具体内容如下:

Jenkins-sshserver-case

项目配置中对应的 SSH Server 修改为当前配置好的 directoryserver

Jenkins-sshbuild-case

保存后,进行构建,控制台输出如下:

# 省略以上内容
C:\Windows\System32\config\systemprofile\AppData\Local\Jenkins\.jenkins\workspace\ynkenginemap\JenkinsDemo>exit 0 
SSH: Connecting from host [LAPTOP-86GF4FKI]
SSH: Connecting with configuration [directoryserver] ...
SSH: Disconnecting configuration [directoryserver] ...
SSH: Transferred 7 file(s)
Finished: SUCCESS
非默认目录

虽然无法直接切换目录,但是可以考虑在文件上传后,通过指令方式,将上传的文件进行指定目录的拷贝,此时需要使用的到 Exec command 输入框,进行输入转换之后的文件其他处理操作。

Jenkins-sshbuild-exec

当前指令xcopy /s /y jenkins "E:\Study\Servers\jenkins",表示拷贝并在目标文件夹文件存在时进行强制覆盖操作,在 xshell 中能够正常使用,保存后,进行 Build Now,查看控制台输出结果如下:

# 省略以上内容
C:\Windows\System32\config\systemprofile\AppData\Local\Jenkins\.jenkins\workspace\ynkenginemap\JenkinsDemo>exit 0 
SSH: Connecting from host [LAPTOP-86GF4FKI]
SSH: Connecting with configuration [localserver] ...
SSH: EXEC: completed after 201 ms
SSH: Disconnecting configuration [localserver] ...
SSH: Transferred 7 file(s)
Finished: SUCCESS

上述为笔者对自定义构建项目的操作与技巧说明。

二、参考链接

[1]官方文档:

https://www.jenkins.io/zh/doc/

[2] 文件目录拷贝:

https://blog.csdn.net/ak47007tiger/article/details/95749419

[3] 远程OpenSSH配置:

https://blog.csdn.net/qq_28806349/article/details/120624802

https://blog.csdn.net/qq_28806349/article/details/120626333



这篇关于Jenkins之Windows中构建Core项目的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程