1、安装gitlab-runner容器(包括安装maven环境以及java环境,因为是部署的java项目)(可直接复制)
FROM gitlab/gitlab-runner:v11.0.2
# 修改软件源
RUN echo 'deb /ubuntu/ xenial main restricted universe multiverse' > /etc/apt/ && \
echo 'deb /ubuntu/ xenial-security main restricted universe multiverse' >> /etc/apt/ && \
echo 'deb /ubuntu/ xenial-updates main restricted universe multiverse' >> /etc/apt/ && \
echo 'deb /ubuntu/ xenial-backports main restricted universe multiverse' >> /etc/apt/ && \
apt-get update -y && \
apt-get clean
# 安装 Docker (容器中也可以安装docker,但是需要将容器中的docker /var/run/ 关联到宿主机中的/var/run/,这样就可以操作宿主机中的docker了)
RUN apt-get -y install apt-transport-https ca-certificates curl software-properties-common && \
curl -fsSL /docker-ce/linux/ubuntu/gpg | apt-key add - && \
add-apt-repository "deb [arch=amd64] /docker-ce/linux/ubuntu $(lsb_release -cs) stable" && \
apt-get update -y && \
apt-get install -y docker-ce
COPY /etc/docker/
# 安装 Docker Compose
WORKDIR /usr/local/bin
RUN wget /topsale/resources/master/docker/docker-compose
RUN chmod +x docker-compose
# 安装 Java(可以网上下载,也可以自己copy进容器安装)
RUN mkdir -p /usr/local/java
WORKDIR /usr/local/java
COPY /usr/local/java
RUN tar -zxvf && \
rm -fr
# 安装 Maven (可以网上下载,也可以自己copy进容器安装)
RUN mkdir -p /usr/local/maven
WORKDIR /usr/local/maven
RUN wget /topsale/resources/master/maven/apache-maven-3.5.
# COPY apache-maven-3.5. /usr/local/maven
RUN tar -zxvf apache-maven-3.5. && \
rm -fr apache-maven-3.5.
# COPY /usr/local/maven/apache-maven-3.5.3/conf/
# 配置环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_152
ENV MAVEN_HOME /usr/local/maven/apache-maven-3.5.3
ENV PATH $PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
# 最后将工作目录转换会根目录
WORKDIR /
2、将 关联上容器中的docker,用于配置加速器和仓库地址。
{
"registry-mirrors": [
""
]
}
3、使用docker-compose来启动gitlab-runner服务
version: '3.1'
services:
gitlab-runner:
build: environment # build会去找environment路径下的Dockerfile文件来进行构建进行(或者直接使用镜像名)
restart: always #退出后重启
container_name: gitlab-runner
privileged: true # 以管理员的身份进行
volumes:
- /usr/local/docker/runner/config:/etc/gitlab-runner # gitlba-runner的配置
- /var/run/:/var/run/ # 挂载的是容器中的docker跟宿主机docker的配置 ,目的是让容器中也可以操作宿主机中的docker
4、注册runner
docker exec -it [容器id] gitlib-runner register
5、配置项目中的.
stages:
- build
- run
- clean
build:
stage: build
script:
- /usr/local/maven/apache-maven-3.6.1/bin/mvn clean package -=true -=true # 出现找不到mvn命令的情况,直接给绝对路径,打包可能会很慢 直接采用多线程打包
- cp target/*.jar src/docker/ # 将打包好的jar移动到Dockerfile的路径下,打包镜像,因为每个阶段都是独立的,jar包被打包好就会删除
- cd src/docker/
- docker build -t app:v1.0 .
run:
stage: run
script:
- cd src/docker/ # 移动到文件夹下面
- docker-compose down # 先去关闭以up来运行的容器
- docker-compose up -d # 启动容器
clean:
stage: clean
script:
- docker rmi $(docker images -q -f dangling=true) # 删除为none的虚悬镜像
6、使用Dockerfile 来将项目打包成镜像
FROM java:8
RUN mkdir -p /usr/local/app
WORKDIR /usr/local/app
COPY *.jar
EXPOSE 8011
ENTRYPOINT ["java","-jar",""]
7、使用来启动服务
version: '3.1'
services:
scientific-server: #服务名
restart: always
container_name: scientific #容器名称
image: app:v1.0 #镜像名称
ports:
- 8011:8011
8、在此期间会遇到 gitlab调用容器执行docker没有权限的问题
因为gitlab会使用gitlab-runner用户来执行,所以在容器中执行docker时可以能会没有权限
宿主机:vim /etc/group 查看组有没有docker 。 如果没有 groupadd -g 1212 docker 重启docker systemctl restart docker 然后需要将 加入到docker组中
docker容器中:给容器中的 加入到组中 chgrp /var/run/ docker 并且将gitlab-runner加入到docker组中 usermod -a -G docker gitlab-runner