时间:2022-08-29 09:36:13 | 栏目:.NET代码 | 点击:次
请提前在 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
笔者贴心地给各位同学准备了 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
中,定义流水线的阶段,在模板中,一个定义了三个阶段,分别是 Build
、Test
、Deploy
。
每个阶段都可以定义多个步骤(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
则是节点选择器,可以选择在何种环境下启动流水线,有 node
、docker
等类型。
登录到 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_rsa
、id_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 和方便的工具。
可视化设计流水线步骤。
观察构建过程。