专栏首页不止dotNETGitLab配合Jenkins打造自动化部署

GitLab配合Jenkins打造自动化部署

GitLabCICD功能模块,但我对Jenkins更熟悉些,所以先使用Jenkins将自动发布搭建起来,后面再继续研究GitLabCICD功能。

需求

  • 程序使用dotNET Core编写,代码通过GitLabMerge Request的方式推送到服务端
  • 代码Merge后会合并到master分支
  • 通过Jenkinsmaster分支监控,获取最新代码,部署到CentOSDocker容器中

有两种方式进行构建 1、在安装Jenkins的服务器上安装dotNET Core环境,编译和发布在此服务器上进行,Docker中只需要运行环境的镜像即可 2、在Docker中进行编译、发布,但需要下载编译环境的镜像 本文采用第一种方式

环境

Windows10

  • 安装jdk
  • 部署Jenkins2.129
  • 安装VS2017
  • 安装Git

CentOS7.4

  • 安装GitLab10.6.4
  • 安装docker-ce18.04
  • 下载镜像dotnetcore

安装Jenkins

Jenkins的官网https://jenkins.io/download/进行Jenkins的下载,如使用Windows,下载Windows版本即可

-w415

因为Jenkins是基于Java的,所以在Windows上先安装好JDK的最新版本。然后根据安装向导进行安装,安装成功后会出现下面界面:

根据向导安装所有的默认插件,这个步骤也可以手动根据需要来安装相应的插件

安装插件

因为构建时需要通过SSH连接到CentOS,所以需要安装SSHpublish over ssh插件

添加了publish over ssh插件后,在「系统管理/系统设置」中可以看到Publish over SSH的设置区域,将需要构建发布的ContOS的服务器信息添加进去

设置Git路径

在「系统管理/全局工具配置」中设置Git路径C:\Program Files (x86)\Git\bin\git.exe,在构建时拉取代码需要用到Git工具

配置Jenkins

首先需要创建一个任务,选择构建一个自由风格的软件项目

配置分为五个步骤:

  1. 源码管理:设置源代码地址等相关信息
  2. 构建触发器:设置构建检查的时间间隔
  3. 构建环境:设置构建环境
  4. 构建:设置构建相关的命令
  5. 构建后操作:复制文件到CentOS

源码管理

  • Repositroy URL:源码仓库地址
  • CredentialsGitLab的账户密码设置
  • Branch:设置分支,当监控到设置的分支有代码更新后,会自动进行构建
  • 源码库浏览器:选择gitlab
  • URL:代码地址
  • Version:10.6,因为我安装的GitLab为10.6的版本

代码拉到本地需要进行存储,在General中进行路径的设置

构建触发器

构建触发器有很多中,这里我们选择轮询SCM,意思是定时检查源码变更(根据SCM软件的版本号),如果有更新就pull最新code下来,然后执行构建动作。

表达式配置为H/2 * * * * 表示每两分钟检查一次。表达式规则如下:

* * * * *
(五颗星,中间用空格隔开)

第一颗*表示分钟,取值0~59
第二颗*表示小时,取值0~23
第三颗*表示一个月的第几天,取值1~31
第四颗*表示第几月,取值1~12
第五颗*表示一周中的第几天,取值0~7,其中0和7代表的都是周日

构建环境

构建

构建后操作

构建后的操作选择Send build artifacts over SSH

进行SSH的相关配置

  • SSH Server:可以选择在「系统管理/系统设置」中全局设置的SSH服务器
  • Source filesdotNET Core程序的发布目录
  • Remove reefixdotNET Core程序的发布目录
  • remote direcotryCentOS服务器的根目录中创建webapi目录,此处配置目录路径
  • Exec command:在CentOS服务器的根目录中创建名称为devops_webapi.sh的脚本文件,此处配置文件路径

到此Jenkins配置完成,保存即可。

CentOS相关设置

1、在根目录中创建webapi目录,Jenkins会将dotNET Core发布后的文件复制到该目录中,在该目录中创建Dockerfile文件,用来生成Docker镜像,Dockerfile文件内容如下:

FROM microsoft/aspnetcore
COPY . /app
WORKDIR /app
EXPOSE 80/tcp
ENTRYPOINT ["dotnet", "FW.WebAPI.dll"]

2、在根目录下创建devops_webapi.sh文件,用来构建镜像和创建容器,文件内容如下:

#!/bin/bash

echo "del none images"
docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker stop
docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker rm
docker images|grep none|awk '{print $3 }'|xargs docker rmi

echo "container del success"
docker stop $(docker ps -a | awk '/webapi:v1/ {print $1}')
docker rm $(docker ps -a | awk '/webapi:v1/ {print $1}')

echo "begin docker build"
cd webapi
docker build -t webapi:v1 .
echo "build end"

docker run -d -p 9011:5000 --restart=always --name webapitest webapi:v1
#echo "none image del start"
#docker rmi $(docker images -f "dangling=true" -q)
#echo "none image del success"

总结

程序自动发布的方式有很多种,先选一种自己熟悉的方式运行起来,再进行更深入的研究,和更优方式的选择。跟写代码一样,不能纸上谈兵,先运行起来,再逐步优化重构。

本文分享自微信公众号 - 不止dotNET(moredotnet),作者:oec2003

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-07-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Docker常用命令

    学习Docker有段时间了,所有的操作都是在命令行下,如果不是每天都在使用,很容易忘记命令。本文将以学习Docker的角度,从前到后,将一些常用的Docker命...

    oec2003
  • 搭建独立博客,这款评论插件不能错过

    1、支持 Markdown 语法 2、采用 github issue 实现,比较清爽(无广告) 3、被墙的可能性较小

    oec2003
  • dotNET Core 3.X 请求处理管道和中间件的理解

    理解 dotNET Core 中的管道模型,对我们学习 dotNET Core 有很大的好处,能让我们知其然,也知其所以然,这样在使用第三方组件或者自己写一些扩...

    oec2003
  • 如何在 RHEL 8 / CentOS 8上安装 Docker CE

    最新版的 RHEL 8 / CentOS 8,Red Hat 已经构建了自己的工具,buildah和podman。 这些工具可以兼容现有的 docker 镜像,...

    雪梦科技
  • Centos安装指定版本docker

    假设这里是我们想安装的是mariadb : # yum list | grep mariadb

    菲宇
  • docker学习1-CentOS 7安装docker环境

    Docker 提供轻量的虚拟化,你能够从Docker获得一个额外抽象层,你能够在单台机器上运行多个Docker微容器,而每个微容器里都有一个微服务或独立应用,例...

    上海-悠悠
  • Centos7之安装docker-18.x原

        一般情况下,都是不管什么直接,yum install docker,这样安装的docker不是我们想要的版本,我们想安装docker-18.06.x版本...

    克虏伯
  • FineUICore基础版部署到docker实战

    FineUI用了好多年,最近出了FineUICore版本,一直没时间是试一下docker,前几天买了一个腾讯云服务器,1核2g,装了centos7.6,开始的时...

    louiezhou001
  • iOS音频(2)——Audio Unit

    相对于MacOS,Audio Unit在iOS上使用到的几率很小,AV Foundation 和Audio Toolbox提供的API已经满足我们平常开发中音视...

    羊羽shine
  • SQL Server基础SQL脚本之分区表、分区方案

    代码120行左右 本系列,几乎都是代码,记得当时写的时候用的是微软的官方实例数据库AdventureWorks_Data.mdf、AdventureWork...

    赵腰静

扫码关注云+社区

领取腾讯云代金券