设为首页 收藏本站
查看: 1069|回复: 0

[经验分享] Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(2)

[复制链接]

尚未签到

发表于 2017-12-6 10:15:56 | 显示全部楼层 |阅读模式
  上一篇:Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(1)
  服务器版本 Ubuntu 16.04 LTS。
  本篇博文目的:项目中添加Dockerfile文件,使用 CI 脚本构建自定义镜像,推送到 Docker 私有仓库,然后在服务器上拉取镜像并创建相应容器,最后启动容器,完成发布和部署。
  实现上面目的,大概有三种实现方式:


  • 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  

  示例配置:
DSC0000.png

  配置好之后,我们需要添加一个用于跑 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 了,示例:
DSC0001.png

  另外,我们还需要做一些其他工作,来保证 GitLab Runner 可以正常运行。
  两台服务器需要配置的环境:


  • GitLab Runner 服务器:.NET Core 2.0、Docker、Docker 私有仓库(或者其他服务器)、SSH
  • 测试服务器:Docker
  首先,我们需要创建一个 Docker 私有仓库,用于存放程序生成的镜像,这个最好是配置在一个单独的服务器,配置详见:Ubuntu Docker Registry 搭建私有仓库
  通过下面两个连接,查看 Docker 私有仓库中的镜像:


  • http://139.219.69.172:5000/v2/_catalog
  • http://139.219.69.172:5000/v2/hwapp/tags/list
  然后,我们需要把 GitLab Runner 服务器中的gitlab-runner账户,添加到docker用户组中,命令:
$ sudo usermod -aG docker gitlab-runner  否则会报如下错误:
DSC0002.png

  然后,我们在 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 连接的时候,会报如下错误:
DSC0003.png

  原因是,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>  - 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执行效果:
DSC0004.png

  deploy_dev_job执行效果:
DSC0005.png

  
DSC0006.png
  然后,我们在测试服务器上,就可以看到创建和运行的容器了:
DSC0007.png

  浏览器打开http://139.219.110.30:5001/api/values,查看效果:
DSC0008.png

  参考资料:


  • Manual installation and configuration on GNU/Linux
  • Registering Runners
  • Using SSH keys
  • GitLab CI 自动部署 netcore web api 到 Docker

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-421118-1-1.html 上篇帖子: gitlab操作postgresql 数据库 下篇帖子: 把Gitlab迁移到Docker容器里
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表