Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(2)
实现上面目的,大概有三种实现方式:
- GitLab Runner 不运行在 Docker 容器中:Executor 选择
shell
(本地运行),然后在本服务器上安装 .NET Core 和 Docker 环境,.gitlab-ci.yml
中执行dotnet
编译发布和docker
构建发布脚本,将构建的镜像推送到 Docker 私有仓库,然后 SSH 连接到服务器,拉取镜像并创建相应容器,最后启动容器,完成发布和部署。 - GitLab Runner 运行在 Docker 容器中:Executor 选择
shell
(GitLab Runner 容器中运行),然后进入 GitLab Runner 容器,在上面安装 .NET Core 和 Docker 环境,.gitlab-ci.yml
中执行dotnet
编译发布和docker
构建发布脚本,后面同上操作。 - GitLab Runner 运行在 Docker 容器中:Executor 选择
docker
(指定镜像容器中运行),需要自定义构建一个包含 .NET Core 和 Docker 环境的镜像,构建脚本执行在自定义镜像容器中,.gitlab-ci.yml
中执行dotnet
编译发布和docker
构建发布脚本,后面同上操作。
上面三种方式,最简单的是第一种,第二种和第三种比较类似,实现稍微复杂点,我也没有配置成功,下面分别说下。
1. GitLab Runner 运行在 Docker 容器中
第二种和第三种实现方式,放在一块说,如果 Executor 选择shell
,然后我们需要在 GitLab Runner 容器中配置编译环境,但这样会产生一个问题,就是如果我们是升级 GitLab Runner 的时候,需要重新配置编译环境,实际情况是,我进入容器docker exec -it gitlab-runner bash
,并没有安装成功 .NET Core 和 Docker 环境(各种服务器中没出现的问题,而且速度非常慢),其实,还有一种方式,就是在.gitlab-ci.yml
中执行安装 .NET Core 和 Docker 环境的脚本(检查是否安装),不过,编写是有些问题,这个我没进行尝试。
如果 Executor 选择docker
,其实,这样会嵌套很多容器,首先服务器上运行 GitLab Runner 容器,然后在此容器内,运行另外一个构建容器,然后在此容器内,执行构建和发布操作,因为 GitLab Runner 在每次构建的时候,会创建和运行一个新的构建容器,所以,我们不能直接在这个容器中,配置 .NET Core 和 Docker 环境,也不能在.gitlab-ci.yml
中执行安装,因为每次都会覆盖之前的操作,唯一的解决方式,就是自定义构建一个包含 .NET Core 和 Docker 环境的镜像文件,然后每次构建使用它进行创建对应容器,执行构建和发布脚本即可。
这里说下,自定义构建一个包含 .NET Core 和 Docker 环境的镜像文件,两种方式:
-
docker build -t 139.219.65.81:5000/xishuai-gitlab-ci-build .
:在Dockerfile
文件编写安装环境脚本。 -
docker commit microsoft-aspnetcore 139.219.65.81:5000/xishuai-gitlab-ci-build
:使用一个容器,然后在容器中安装环境,最后基于这个容器,创建一个自定义镜像文件
第一种方式,我没有进行尝试,第二种方式尝试了下,我使用microsoft/aspnetcore
镜像作为基础镜像(800M 左右),然后在其创建的容器中安装 Docker 环境,速度非常慢,而且有时候报各种奇怪的错误,如果安装成功了,左右构建的自定义镜像文件,也非常的大。
这两种方式,我最后都没有采用,最后使用的是下面最简单的方式。
2. GitLab Runner 不运行在 Docker 容器中(Executor 选择 Shell)
如果我们不使用 Docker 安装和运行 GitLab Runner,就得手动进行安装和配置下 GitLab Runner。
安装命令:
$ sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-ci-multi-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-ci-multi-runner-linux-amd64
然后进行给予其权限:
$ sudo chmod +x /usr/local/bin/gitlab-runner
接着就可以进行注册 GitLab Runner 了,命令:
$ sudo gitlab-runner register
示例配置:
配置好之后,我们需要添加一个用于跑 GitLab Runner 的gitlab-runner
用户,命令:
$ sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
然后指定 GitLab Runner 执行的用户和工作目录,命令:
$ sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
配置好之后,我们可以从配置文件中,查看相关配置信息:
$ cat /etc/systemd/system/gitlab-runner.service [Unit] Description=GitLab Runner After=syslog.target network.target ConditionFileIsExecutable=/usr/bin/gitlab-ci-multi-runner [Service] StartLimitInterval=5 StartLimitBurst=10 ExecStart=/usr/bin/gitlab-ci-multi-runner "run" "--working-directory" "/home/gitlab-runner" "--config" "/etc/gitlab-runner/config.toml" "--service" "gitlab-runner" "--syslog" "--user" "gitlab-runner" Restart=always RestartSec=120 [Install] WantedBy=multi-user.target
上面工作完成之后,就可以启动 GitLab Runner 了,命令:
$ sudo gitlab-runner start
然后,我们就可以在项目中看到 GitLab Runner 了,示例:
另外,我们还需要做一些其他工作,来保证 GitLab Runner 可以正常运行。
两台服务器需要配置的环境:
- GitLab Runner 服务器:.NET Core 2.0、Docker、Docker 私有仓库(或者其他服务器)、SSH
- 测试服务器:Docker
首先,我们需要创建一个 Docker 私有仓库,用于存放程序生成的镜像,这个最好是配置在一个单独的服务器,配置详见:Ubuntu Docker Registry 搭建私有仓库
通过下面两个连接,查看 Docker 私有仓库中的镜像:
然后,我们需要把 GitLab Runner 服务器中的gitlab-runner
账户,添加到docker
用户组中,命令:
$ sudo usermod -aG docker gitlab-runner
否则会报如下错误:
然后,我们在 GitLab Runner 服务器中,切换到gitlab-runner
用户下,配置 SSH,命令:
$ su gitlab-runner $ ssh-keygen -t rsa -P '' $ ssh-copy-id root@139.219.69.172
139.219.69.172
是测试服务器的 IP 地址,如果不进行这样配置,SSH 连接的时候,会报如下错误:
原因是,GitLab Runner 在执行脚本的时候,会切换到gitlab-runner
用户下,我们在root
账户下配置 SSH,是无效的。
以上工作完成之后,GitLab Runner 执行编译脚本,基本上执行是没有问题了,我们在示例项目中添加.gitlab-ci.yml
配置文件,示例:
stages: - build - deploy_dev build_job: stage: build only: - master script: - dotnet restore - dotnet build deploy_dev_job: stage: deploy_dev environment: name: development only: - master script: # 发布程序并部署运行 - dotnet publish -c Release --output bin/publish - docker build -t $GITLAB_SERVER:5000/hwapp . - docker push $GITLAB_SERVER:5000/hwapp - ssh root@$DEPLOY_SERVER_DEV "docker pull $GITLAB_SERVER:5000/hwapp && docker run -d -p 5001:5001 $GITLAB_SERVER:5000/hwapp"
build_job
执行效果:
deploy_dev_job
执行效果:
然后,我们在测试服务器上,就可以看到创建和运行的容器了:
浏览器打开http://139.219.110.30:5001/api/values
,查看效果:
本文转自田园里的蟋蟀博客园博客,原文链接:http://www.cnblogs.com/xishuai/p/ubuntu-gitlab-ci-docker-aspnet-core-part-2.html,如需转载请自行联系原作者
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Redis企业集群工具RLEC
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/50549849 Redis企业集群工具RLEC 作者:chszs,未经博主允许不得转载。经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 一、RLEC介绍 RLEC即Redis Labs Enterprise Cluster,是一个Redis企业集群工具。使用RLEC可以部署一个企业级的Redis集群,它作为一个管理和运行多种Redis数据库的容器,保证了Redis的高可用性和可伸缩性,而且性能和稳定性都极好。 官方主页: https://redislabs.com/redis-enterprise RLEC支持Ubuntu 14.04、RedHat 6.5和7.0、Amazon Linux三种系统。 RLEC的部署类别 1)RLEC可以部署为单机(即一个主Redis服务器) 2)高可用部署(一主一从) 3)集群部署(多主分片) 4)高可用集群(多主多从分片) RLEC通过连续性的健康集群中的每...
- 下一篇
docker学习(1) 安装
docker是啥就不多讲了,简言之就是更轻量、更牛叉的新一代虚拟机技术。下面是安装步骤: 一、mac/windows平台的安装 docker是在linux内核基础上发展而来的,无法直接运行在mac/windows上,需要借助docker-machine工具,先在mac/windows上建一个linux的虚拟机,然后才能继续玩下去。默认内置的虚拟机引擎是Oracle的免费软件VirtualBox,可支持vmware fusion之类的商业软件。 1.1 下载docker toolbox 下载地址:http://www.docker.com/docker-toolbox ,toolbox已集成了docker-machine,docker client,virtualbox之插件,强烈建议在mac/windows上学习docker的同学用这种方式安装docker(注:虽然mac上也可以通过brew install 方式安装,但是没有图形界面,学习起来不方便)。 安装过程很简单,一路Next就可以了,唯一要注意的是最后一个界面: docker toolbox提供了二种运行方式,终端命令行及图形...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS关闭SELinux安全模块
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2整合Redis,开启缓存,提高访问速度