Rails大作业管理:Gitlab CI/CD docker部署以及外网访问

在当Ruby课助教的过程中,老师提出了一个需求,既然我们都使用Gitlab,不如让学生的Rails项目都跑CI/CD,每次提交都自动部署,并且外网能够访问,这样让学生能够尝试CI/CD过程,又方便老师查看大作业的完成情况。

搭建Runner环境

在真实进行尝试之前,设计了两种方案,主要分别对应Gitlab Runner的shell executor和docker executor。从安全性和整合性的角度考虑,肯定是docker executor要较优一些,但是docker executor在执行完之后就会退出,所以最后一步就是将项目部署到其他站点,对于我们的场景显然是提高了复杂程度。当然画图技能是要同时锻炼一下的。第一张图中的Docker Runner其实应该是Docker + Runner with shell executor。

所以最后选择了shell executor的方案,同时为了安全和隔离,给每个gitlab-runner都打包一个docker环境,这样每个学生都对应一个docker容器,即使使用shell executor,他们也没办法破坏宿主机环境和其他同学的环境。而外网访问就可以通过docker的端口映射来做。

CSDN的markdown对Dockerfile的支持不太好,勉强这样看看吧。其中的注释也不删除了,可以看看在最终完成完整的Dockerfile之前都做了哪些探索工作。很多地方其实主要是为了GFW做的,不然很多软件源直接用原有的就行。

一开始是pull了gitlab-runner镜像然后bash进去装Rails环境,然后再commit成为新的base镜像,但是就是无论如何怎么都不能把gitlab-runner用户的bundle source配置成国内镜像,之前一直还用root用户配置,但bundle source配置是在home目录下所以更不可能配置好了。后来意识到这一点,于是切换到gitlab-runner用户去配置,但依然不能使用,查看了volume才知道,这个镜像把gitlab-runner的home目录作为一个volume挂载,所以我所有的用户配置都是无法保存的。
所以后来还是用Dockerfile从基础的ubuntu镜像安装所有的软件来做,有很多软件通过官方途径被GFW拦了,所以先下下来,通过COPY命令拷进镜像。配置如下的Dockerfile,然后执行sudo docker build -t hujuntao:gitlab-runner-base .建立一个image。

FROM ubuntu:16.04

""" apt source """
RUN apt-get update
RUN apt-get install -y apt-transport-https
RUN mv /etc/apt/sources.list /etc/apt/sources.list.old
COPY ./sources.list /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y wget

""" install gitlab-runner """
COPY ./gitlab-runner-linux-amd64 /usr/local/bin/gitlab-runner
RUN chmod a+x /usr/local/bin/gitlab-runner
RUN useradd --create-home gitlab-runner --shell /bin/bash
RUN gitlab-runner 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值