天天看点

Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(1)

相关博文:

<a href="http://www.cnblogs.com/xishuai/p/ubuntu-install-gitlab.html">Ubuntu 简单安装和配置 GitLab</a>

<a href="http://www.cnblogs.com/xishuai/p/ubuntu-install-docker.html">Ubuntu 简单安装 Docker</a>

<a href="http://www.cnblogs.com/xishuai/p/ubuntu-install-gitlab-with-docker.html">Ubuntu Docker 简单安装 GitLab</a>

<a href="http://www.cnblogs.com/xishuai/p/ubuntu-install-gitlab-runner-with-docker.html">Ubuntu Docker 安装和配置 GitLab CI 持续集成</a>

服务器版本 Ubuntu 16.04 LTS。

经过上面四篇博文中的相关安装和配置,我们主要完成了两个容器的创建和运行:<code>gitlab</code>和<code>gitlab-runner</code>(GitLab 站点和 GitLab CI 服务):

本篇博文目的:使用 GitLab CI 脚本编译 ASP.NET Core 2.0 程序,然后将编译后的文件传输到服务器上,最后使用 SSH 连接服务器,并运行程序,完成发布和部署。

简单来说,就是我们每次使用<code>git push</code>提交完代码,自动完成发布和部署。

我们再理一下实现上面目的关键点:

创建一个 ASP.NET Core 2.0 示例程序

完善并正确的<code>.gitlab-ci.yml</code>文件配置

GitLab CI 服务器使用<code>ssh</code>连接到测试服务器(在 Docker 中)

使用<code>scp</code>进行服务器之间的文件传输

使用<code>supervisor</code>进行站点程序的进程管理

我花了很长时间配置第三步,其实最后解决也很简单,当然都是马后炮的结论,下面我们分别来进行操作。

注:服务器快过期了,大家可以随便搞。

我再搬运下命令(安装 .NET Core 2.0,并创建 ASP.NET Core 2.0 示例程序):

最后,绑定下 ASP.NET Core 2.0 程序端口:

上面是我最终调试成功后的<code>.gitlab-ci.yml</code>文件配置,其实整个的构建和发布流程,从上面的配置中都可以看出。

这里记录下一些东西:

配置一开始的<code>image</code>,设置的是我们用于构建的镜像(也就是说后面所有的脚本执行,都是在基于这个镜像创建的容器中),如果不设置的话,默认使用的是我们一开始配置 GitLab CI 填写的 Docker Image,也可以手动编辑<code>vim /srv/gitlab-runner/config/config.toml</code>进行修改,我这里使用的是<code>microsoft/aspnetcore-build</code>镜像,只用于 ASP.NET Core 应用程序的编译和构建。

<code>stage</code>可以理解为台阶,每走一步相当于<code>job</code>,当然,这里的台阶可以走很多步,需要注意的是,每上一个台阶或者每走一步,都必须基于上一个台阶或上一步执行成功,<code>before_script</code>执行在这些步骤之前,可以理解为准备工作。

<code>environment</code>将执行的<code>job</code>归纳为哪一种执行环境,你可以设置开发环境和正式环境,我们可以通过通过后台进行查看:

Ubuntu &amp; GitLab CI &amp; Docker &amp; ASP.NET Core 2.0 自动化发布和部署(1)

什么意思呢?就是我们需要在 GitLab CI 构建环境中,使用 SSH 连接到测试服务器,这样我们才可以做接下来的一些操作。

<code>.gitlab-ci.yml</code>示例配置:

需要强调一点:别在 GitLab CI 容器中进行 SSH 配置,因为 CI 构建脚本执行在另外的容器中,并且这个容器是动态进行创建的,也没办法在这个动态容器中进行配置(指的是手动生成 RSA 密钥)。

所以,我们只能手动生成 RSA 密钥,然后强制添加到容器中的 SSH 配置中(通过 RSA 密钥内容)。

配置步骤:

首先,在任何一台服务器上,创建 RSA 无密码的密钥:

然后复制 RSA 密钥内容,添加到<code>/Project/Settings/Pipelines</code>的<code>Secret variables</code>配置中(命名为<code>SSH_PRIVATE_KEY_DEV</code>):

Ubuntu &amp; GitLab CI &amp; Docker &amp; ASP.NET Core 2.0 自动化发布和部署(1)

这里需要特别注意,复制内容为(包含开头和结尾的注释信息):

我一开始复制没有包含注释信息,然后就一直报下面的错误:

Ubuntu &amp; GitLab CI &amp; Docker &amp; ASP.NET Core 2.0 自动化发布和部署(1)

错误代码:

这里的<code>$SSH_PRIVATE_KEY_DEV</code>,就是上面我们在<code>Secret variables</code>中,添加的 RSA 密钥内容。

错误信息就是说需要输入 RSA 密钥的密码,但我创建的确实是无密码的 RSA 密钥,也就是说这个密钥是无效的,我被这个问题折磨了好几天,其他人的记录:

<a href="https://gitlab.com/gitlab-org/gitlab-ce/issues/14434">"Enter passphrase for /dev/fd/63" error</a>

配置好这一步之后,然后重新测试下,我们就可以看到下面的执行信息了:

接着我们需要将这个 RSA 密钥对应的公钥,上传到需要连接到的服务器(也就是我们的测试服务器),命令如下:

到此,GitLab CI 中 SSH 的配置基本上完成了,你可以在<code>.gitlab-ci.yml</code>中添加连接脚本,进行测试:

一开始,我们说到使用<code>scp</code>进行服务器之间的文件传输,因为<code>scp</code>可以基于 SSH 连接进行传输文件,所以我们直接进行文件传输了,示例代码:

这里贴一下,<code>supervisorctl</code>的常用命令:

命令

说明

supervisorctl stop program_name

停止某个进程

supervisorctl start program_name

启动某个进程

supervisorctl restart program_name

重启某个进程

supervisorctl stop all

停止全部进程

supervisorctl reload

载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程

supervisorctl update

根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启

Ubuntu &amp; GitLab CI &amp; Docker &amp; ASP.NET Core 2.0 自动化发布和部署(1)
Ubuntu &amp; GitLab CI &amp; Docker &amp; ASP.NET Core 2.0 自动化发布和部署(1)
Ubuntu &amp; GitLab CI &amp; Docker &amp; ASP.NET Core 2.0 自动化发布和部署(1)

写在最后:

GitLab CI &amp; ASP.NET Core 2.0 发布和部署(完成):使用 CI 脚本编译程序,然后将编译后的文件传输到服务器上,最后运行程序,完成发布和部署。

GitLab CI &amp; ASP.NET Core 2.0 &amp; Docker 发布和部署(下篇):项目中添加<code>Dockerfile</code>文件,使用 CI 脚本构建自定义镜像,然后在服务器上拉取并创建相应容器,最后启动容器,完成发布和部署。

本文转自田园里的蟋蟀博客园博客,原文链接:http://www.cnblogs.com/xishuai/p/ubuntu-gitlab-ci-docker-aspnet-core-part-1.html,如需转载请自行联系原作者