赞
踩
在当Ruby课助教的过程中,老师提出了一个需求,既然我们都使用Gitlab,不如让学生的Rails项目都跑CI/CD,每次提交都自动部署,并且外网能够访问,这样让学生能够尝试CI/CD过程,又方便老师查看大作业的完成情况。
在真实进行尝试之前,设计了两种方案,主要分别对应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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。