Linux下使用Jenkins自动化构建.NET Core应用

目录
  • 部署 Jenkins
  • 安装插件
  • 拉取镜像
  • 制作 Jenkinsfile 脚本
  • 构建流水线
  • 观察

部署 Jenkins

请提前在 Linux 上安装 Docker,在 Linux 中,我们使用 Docker 启动 Jenkins,这样可以避免手动安装大量依赖以及污染本地环境,也便于快速启动和故障恢复。

安装 Docker 完毕后,使用 docker version 检查 Docker 版本,Docker 版本不能为 1.x、3.x 这种版本,请升级到 18.x 以上版本。一般在 Ubuntu 系统中,下载安装的是最新版本,但是在 Centos 中因为默认镜像源中的版本比较旧, 安装 Doker 版本较低,需要手动添加新版本的镜像源再升级。

请参考:https://www.jb51.net/article/243104.htm

因为会使用到容器提供环境,以及使用 Docker 打包 .NET Core 程序为 Docker 镜像,所以需要在 Jenkins 容器中映射 Docker 的 .sock 文件,以便在容器中,还能使用 Docker 命令。

在宿主机中创建 /var/jenkins_home 目录,用于备份 Jenkins 中的数据。

在 Linux 中使用 Docker 启动 Jenkins ,其命令如下:

docker run \
  -u root \
  -itd \
  -p 8080:8080 \
  -p 50000:50000 \
  -v /var/jenkins_home:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  jenkinsci/blueocean

启动后,使用 docker logs {容器ID} 查看日志获取 Jenkins 登录密码,其密码是一串哈希字符串,例如:1abc12445adcf

最后打开 8080 端口,即可访问 Jenkins。

安装插件

登录 Jenkins 后,会提示安装推荐的插件,请根据提示安装推荐的插件,推荐安装的插件列表如下:

Folders Plugin
OWASP Markup Formatter Plugin
Build Timeout
Credentials Binding Plugin
Timestamper
Workspace Cleanup
Ant
Gradle
Pipeline
GitHub Branch Source Plugin
Pipeline: GitHub Groovy Libraries
Pipeline: Stage View
Git plugin
SSH Build Agents
Matrix Authorization Strategy Plugin
PAM Authentication
LDAP
Email Extension
Mailer Plugin
Localization: Chinese (Simplified)

另外为了提供容器打包支持等,需要另外手工安装以下插件。

# 提供 Docker 支持(必装)
docker
Docker Pipeline
docker-build-step

# 可视化设计流水线脚本的工具(必装)
Blue Ocean

# 提供对 gitlab 支持,如果不使用可以不安装
gitlab

# 提供 Git 参数化和钩子触发构建支持,不需要可以不安装
Git Parameter
Generic Webhook Trigger

拉取镜像

这里介绍一下我们后面要用到的两个镜像。

拉取一个 .NET Core SDK,每次启动流水线时,都会启动一个 .NET Core SDK 容器,为我们提供构编译、发布 .NET Core 程序的环境。

docker pull mcr.microsoft.com/dotnet/sdk:3.1

拉取一个 ASP.NET Core Runtime,用于制作应用镜像的基础镜像。

docker pull mcr.microsoft.com/dotnet/aspnet:3.1

镜像列表:

mcr.microsoft.com/dotnet/aspnet   3.1          ac199e8d6dff   2 weeks ago   208MB
mcr.microsoft.com/dotnet/sdk      3.1          82e2a34647f0   2 weeks ago   710MB

制作 Jenkinsfile 脚本

笔者贴心地给各位同学准备了 Demo 项目,请到 https://github.com/whuanle/DotNetCoreJenkinsDemo 仓库,fork 到你的仓库,后续我们使用这个 ASP.NET Core 的 Demo 程序实践流程。

在项目文件中,可以找到一个 Jenkinsfile 文件,此文件为我们定义流水线的步骤。

我们看一下简单的 Jenkinsfile 模板:

pipeline {
    stages {
        stage('Build') {
            steps {
                echo 'Building..'
            }
        }
        stage('Test') {
            steps {
                echo 'Testing..'
            }
        }
        stage('Deploy') {
            steps {
                echo 'Deploying....'
            }
        }
    }
}

stages 中,定义流水线的阶段,在模板中,一个定义了三个阶段,分别是 BuildTestDeploy

每个阶段都可以定义多个步骤(steps),每个步骤中都可以执行多个不同类型的 step。

    stage('Test') {
        steps {
            echo 'Testing..'
        }
    }

demo 中的 Jenkinsfile 比较简单,我们可以找个 Publish 阶段的内容看一下:

        stage('Publish') {
            steps {
                sh 'dotnet publish src/WebDemo -c Release'
            }
        }

其实很简单,每个步骤执行 shell 命令就行,我们可以使用 sh '...' 表示此步骤要执行的 shell 命令。

接着我们看一下 Jenkinsfile 开头的两部分内容。

    // 全局环境变量
    environment {
        IMAGENAME     = 'webdemo'       // 镜像名称
        IMAGETAG      = '1.0.0'         // 镜像标签
        APPPORT       = '8089'          // 应用占用的端口
        APPDIR        = '/opt/app'      // 应用工作的目录
    }

    agent {
        docker {
            image 'mcr.microsoft.com/dotnet/sdk:3.1'
            args '-v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker'
        }
    }

environment 中,可以定义此次构建过程的环境变量。

agent 则是节点选择器,可以选择在何种环境下启动流水线,有 nodedocker 等类型。

构建流水线

登录到 Jenkins 网页后台,在左侧菜单栏中点击 New Item,开始创建流水线。

Jenkins 有多种流水线风格,还可以通过添加插件,来加入更多的流水线类型,我们主要了解 Freestyle project 、Pipeline、Multibranch Pipeline 即可。

  • Freestyle project

    Freestyle project流水线 使用上比较自由,不需要对项目做更改即可创建流水线,可以添加很多选择、配置。如果流程需要变化,改动比较麻烦。

  • Pineline、Multibranch Pipeline

    他们都可以同时处理多个分支,这两种都是依赖于项目中的 Jenkinsfile 文件。Multibranch Pipeline 好处是可以同时检查多个分支,为每个分支创建构建Job,而 Pipeline 会把多个分支放到一个 Job 中。

点击 New Item ,创建流水线,选择 Mutibranch Pipline。

添加 Git 源代码 仓库方式,我们可以自由选择一种类型,建议使用 Single repository & branch

由于我们没有添加密钥,所以 Jenkins 无法访问你的 Github 仓库,所以需要添加一个可访问的密钥。

找一台已经安装了 git 的电脑,生成公钥私钥,为 Jenkins 和 GitHub 之间提供加密连接。

执行命令:

ssh-keygen -t rsa -b 2048 -C "email@example.com"

根据提示,填写要存放密钥的路径,如 D:/id_rsa

执行命令后,会生成两个文件, id_rsaid_rsa.pub,复制 id_rsa (私钥)中的内容到 Jenkins 中。

然后把 id_rsa.pub (公钥)的内容添加到 Github 你的账号中。

你可以使用多种方式添加认证方式,最简单、安全的是密钥,我们可以选择 Secret file,然后上传私钥,或者使用别的方式,这里就不赘述了。

然后选择要发布的分支,最后直接保存即可。

然后回到主界面,打开 我们创建的流水线,点击 Build Now,即可启动流水线。

构建成功截图:

在 Linux 服务器上,查看镜像列表:

root@localhost ~ 19:54:20 # docker images
REPOSITORY                        TAG          IMAGE ID       CREATED         SIZE
webdemo                           1.0.0        79b636ddef73   2 minutes ago   208MB

可以看到,已经自动打包应用为镜像,其镜像名称和版本号,都可以在 Jenkinsfile 中设置。

观察

我们可以在构建界面中,观察每个步骤的日志。

在 Open Blue Ocean 中,有更加好看的 UI 和方便的工具。

可视化设计流水线步骤。

观察构建过程。

到此这篇关于Linux下使用Jenkins自动化构建.NET Core应用的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 为Jenkins添加SSH全局凭证

    目录 一.什么是凭证 1.凭据简介 2.凭据分类 3.凭据安全 二.添加凭据 1.创建的时候添加 2.在凭证里面添加 一.什么是凭证 1.凭据简介 有许多第三方网站和应用程序可以与Jenkins进行交互,例如代码仓库GitHub等. 此类应用程序的系统管理员可以在应用程序中配置凭证以专供Jenkins使用.通常通过将访问控制应用于这些凭证来完成这项工作,以“锁定Jenkins可用的应用程序功能区域”.一旦Jenkins管理员在Jenkins中添加/配置这些凭证,Jenkins项目就可以使用凭证与

  • 关于docker启动jenkins环境的问题

    [注意:]jenkins的docker镜像,需要从官网进入直接获取,其他地方获取到的docker镜像,可能因为Jenkins版本过低,导致后续插件安装失败等问题!!! jenkins基本工作原理 1.拉取镜像 需要从官网进入:Jenkins download and deployment 命令: docker pull jenkins/jenkins:lts 2.创建目录 由于防止jenkins中重要文件因为容器损毁或删除导致文件丢失,因此创建文件对外挂载 mkdir /data/jenkins

  • Windows系统修改Jenkins端口号

    Jenkins默认使用的是8080端口进行访问,有时候需要根据自己的需求将默认的8080端口改掉,这篇文章将讲解如何更改Jenkins默认的8080端口. 在安装Jenkins的时候,会有一个配置Jenkins实例的界面,配置实例界面可以修改端口号,但是那里修改的端口号不起作用,需要修改配置文件里面的端口号. 一.关闭Jenkins服务 修改端口号之前要首先关掉Jenkins服务,Jenkins安装完成以后就会一直处于启动状态,除非手动将其关闭. 可以看到Jenkins是运行状态. 1.使用命令

  • Jenkins安装的时区问题分析解决

    目录 一.首先根据官方的方式去修改启动参数 二.用另外一种办法,更改系统时区 正常情况下,jenkins是Java执行在Java容器,比如tomcat容器之下,只要改了tomcat的时区就行. 我这里是为了方便后续的代码可用性测试,用的是Ubuntu中apt在线安装,也只是安装了jdk然后让他自己运行.所以符合官网在Jenkins的启动参数方面考虑. 一.首先根据官方的方式去修改启动参数 参考:https://www.jenkins.io/doc/book/using/change-time-z

  • 为Jenkins创建定时构建任务

    目录 一.前言 二.创建定义任务 1.新建任务 2.General 3.源码管理 4.构建触发器 5.构建环境 6.构建 7.构建后操作 三.总结 一.前言 在前面的文章中,我们添加SSH凭据,添加了凭据以后就可以利用Jenkins创建构建任务了.我们这里利用Jenkins创建一个定时构建任务. 二.创建定义任务 1.新建任务 在Jenkins首页选择新建item或者点击创建一个新任务: 输入任务名称,选择自由风格的任务(Freestyle project): 2.General 在Genera

  • 在Windows平台安装Jenkins的方法介绍

    一.什么是Jenkins Jenkins是一个开源软件项目,是基于Java开发的.我们可以利用Jenkins来实现持续集成的功能. 因为Jenkins是基于Java开发的,所以在安装Jenkins之前首先需要安装Java的JDK. 二.安装Jenkins 在Windows平台上面安装Jenkins共有两种方式,下面分别介绍这两种方式. 1.使用msi安装Jenkins 安装Jenkins之前首先去Jenkins官网下载安装文件,Jenkins官网:https://jenkins.io/zh/ 如

  • Linux下使用Jenkins自动化构建.NET Core应用

    目录 部署 Jenkins 安装插件 拉取镜像 制作 Jenkinsfile 脚本 构建流水线 观察 部署 Jenkins 请提前在 Linux 上安装 Docker,在 Linux 中,我们使用 Docker 启动 Jenkins,这样可以避免手动安装大量依赖以及污染本地环境,也便于快速启动和故障恢复. 安装 Docker 完毕后,使用 docker version 检查 Docker 版本,Docker 版本不能为 1.x.3.x 这种版本,请升级到 18.x 以上版本.一般在 Ubuntu

  • 使用Jenkins自动化构建工具进行敏捷开发

    目录 一.序言 二.安装与使用 (一)安装 1.查看初始密码 2.修改默认工作空间 (二)使用 1.构建配置 2.添加项目 (三)免密登录 三.触发策略 (一)定时触发 (二)URL 触发 (三)钩子触发 附录.工具使用 1.语言设置 2.构建环境清单 3.环境配置 4.任务配置 一.序言 Jenkins 是一款自动化构建工具,能够基于 Maven 构建后端 Java 项目,也能够基于 nodejs 构建前端 vue 项目,并且有可视化 web 界面. 所谓自动化构建是按照一定的策略执行打包脚本

  • 关于linux下core dump【总结】

    1.前言 一直在从事linux下后台开发,经常与core文件打交道.还记得刚开始从事linux下开发时,程序突然崩溃了,也没有任何日志.我不知所措,同事叫我看看core,我却问什么是core,怎么看.同事鄙视的眼神,我依然在目.后来学会了从core文件中分析原因,通过gdb看出程序挂再哪里,分析前后的变量,找出问题的原因.当时就觉得很神奇,core文件是怎么产生的呢?难道系统会自动产生,可是我在自己的linux系统上面写个非法程序测试,并没有产生core问题?这又是怎么回事呢?今天在ngnix的

  • 关于Jenkins + Docker + ASP.NET Core自动化部署的问题(避免踩坑)

    本来没想着要写这篇博客,但是在实操过程中,一个是被网络问题搞炸了心态(真心感觉网络能把人搞疯,别人下个包.下个镜像几秒钟搞定,我看着我的几KB小水管真是有苦说不出),另一个就是这里面坑还是有一些的,写出来也是为了让大家避免重复踩坑 几个注意点: 下方shell命令绝大部分都需要管理员权限,所以如果你使用的用户不是root,则都要加上sudo 对于较复杂的命令我都提供了注释版和无注释版,无注释版是为了让你复制起来方便 准备工作 CentOS 7.x Docker Jenkins 一份支持 dock

  • window下使用Jenkins来做自动化部署的教程图解

    今天我们来说一下,如何使用Jenkins+powershell脚本,将我们的.NET CORE的脚本部署到对应的服务器上. 这里我们使用的源码管理工具是TFS.虽然源码管理器比较老旧,但是原理都差不多. 1.安装Jre,因为我们的Jenkins是基于java开发的,所以需要先在服务器上安装java的运行时环境 这个安装过程比较简单,百度下载JRE,然后安装,暂且不表. 下载地址:https://www.java.com/en/download/manual.jsp 2.下载并安装Jenkins,

  • linux 下jenkins项目搭建过程(centos7为例 )

    以部署https://gitee.com/tengge1/ShadowEditor 这个项目为例 一.安装jdk 1.下载jdk 以jdk-8u261-linux-x64.tar.gz 安装为例 2.创建 java文件夹 cd /usr/local mkdir java 3.然后解压jdk包 tar -zcvf jdk-8u261-linux-x64.tar.gz 4.配置环境变量 vi /etc/profile 5.加入 6.保存退出 :wq 7.生效配置文件 source /etc/prof

  • Linux下core文件的使用方法详解

    前言 有时候程序会异常退出而不带任何日志,此时就可以使用 code 文件进行分析,它会记录程序运行的内存,寄存器,堆栈指针等信息 什么是core文件 通常在 Linux 下遇到程序异常退出或者中止,我们都会使用 core 文件进行分析,其中包含了程序运行时的内存,寄存器,堆栈指针等信息,格式为 ELF ,可以理解是程序工作当前状态转储成一个文件,通过工具分析这个文件,我们可以定位到程序异常退出或者终止时相应的堆栈调用等信息,为解决问题提供帮助. 使用core文件调试 生成方法 查看当前 core

  • Linux下Jenkins忘记密码的操作步骤

    1.Jenkins安装步骤: https://www.jb51.net/article/176615.htm 2.修改密码 (1)编辑Jenkins的config.xml配置文件 vim /var/lib/jenkins/config.xml (在JENKINS_HOME目录下,每个人安装目录不同,所以改为自己的路径) (2)修改相关配置 1.输入查找命令,找到配置的位置: /useSecurity 2.用<!---->符号注释或者直接删除以下配置 <useSecurity>tru

  • Linux下如何使用gdb调试core文件

    1.core文件 当程序运行过程中出现Segmentation fault (core dumped)错误时,程序停止运行,并产生core文件.core文件是程序运行状态的内存映象.使用gdb调试core文件,可以帮助我们快速定位程序出现段错误的位置.当然,可执行程序编译时应加上-g编译选项,生成调试信息. 当程序访问的内存超出了系统给定的内存空间,就会产生Segmentation fault (core dumped),因此,段错误产生的情况主要有: (1)访问不存在的内存地址: (2)访问系

  • ASP.NET Core在Linux下为dotnet创建守护进程

    什么是守护进程 在linux或者unix操作系统中,守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件.由于在linux中,每个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端被称为这些进程的控制终端,当控制终端被关闭的时候,相应的进程都会自动关闭.但是守护进程却能突破这种限制,它脱离于终端并且在后台运行,并且它脱离终端的目的是为了避免进程在运行的过程中的信息在任何终端中显示并且进程也不会

随机推荐