写在前面
最近在玩gitlab
,发现了runner
这个玩意,研究了下文档,发现有点意思。我非常倾向将部署docker
化,于是研究如何使用docker gitlab-runner
达到类似宿主机安装的使用效果,同时又是容器化的,方便迁移和扩展更多节点。也避免在安装使用中出现权限等一些莫名的问题。
一、安装
我这里选择官方的docker
镜像gitlab/gitlab-runner:latest
。这个镜像是基于Ubuntu 20.04 LTS
的,也有基于alpine
的。我要安装很多东西,所以选择前者。
gitlab-runner官方安装文档
二、自定义docker容器
这里其实不是必须的,目的只是在容器中安装一系列的编译环境,如jdk、maven、gradle、node、docker client
等,根据需要可以安装更多东西。
我把安装放在了容器build
的阶段。
- 首先是项目结构
- 然后是docker-compose.yml
gitlab-runner:
container_name: gitlab-runner
build: docker
restart: always
environment:
TZ: 'Asia/Shanghai'
volumes:
- '/home/devusr/data/gitlab-runner/config:/etc/gitlab-runner'
- '/var/run/docker.sock:/var/run/docker.sock'
挂载/var/run/docker.sock
的原因是我要在docker
中执行docker
命令,具体原理可以看我另外一篇文章:在docker容器中执行docker命令
- 最后是
Dockerfile
FROM gitlab/gitlab-runner:latest
ENV BASHRC_FILE=/etc/profile
#node版本
ENV NODE_VERSION=16
ENV TAOBAO_REGISTRY=https://registry.npm.taobao.org
#jdk版本
ENV JDK_VERSION=11.0.2
#jdk下载地址
ENV JDK_DOWNLOAD_URL=https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz
#maven版本 ---- 只对 maven 3 有效
ENV MAVEN_VERSION=3.8.2
#gradle版本
ENV GRADLE_VERSION=7.2
RUN apt-get update -y \
&& apt-get install -y docker.io vim unzip language-pack-zh-hans \
#配置docker
# && groupadd -g 999 docker \
&& usermod -aG docker gitlab-runner \
&& chmod a+rw /var/run/docker.sock \
#安装node
&& curl -sL https://deb.nodesource.com/setup_${NODE_VERSION}.x | bash - \
&& apt-get install -y nodejs \
&& localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 \
&& npm install cnpm -g --registry=${TAOBAO_REGISTRY} \
#安装jdk
&& export "JDK_V=echo ${JDK_VERSION#*.}" \
&& wget -O /tmp/openjdk-${JDK_VERSION}.tar.gz ${JDK_DOWNLOAD_URL} \
&& mkdir /opt/openjdk \
&& tar xvf /tmp/openjdk-${JDK_VERSION}.tar.gz -C /opt/openjdk \
&& export JAVA_HOME=/opt/openjdk/jdk-${JDK_VERSION} \
&& export CLASSPATH=.:${JAVA_HOME}/lib \
&& export PATH=${JAVA_HOME}/bin:${PATH} \
&& echo "export JAVA_HOME=/opt/openjdk/jdk-${JDK_VERSION}\n" \
"export CLASSPATH=.:${JAVA_HOME}/lib\n" \
"export PATH=${JAVA_HOME}/bin:${PATH}" >> ${BASHRC_FILE} \
# && source ${BASHRC_FILE} \
#安装maven
&& wget -O /tmp/apache-maven-${MAVEN_VERSION}.zip https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.zip \
&& mkdir /opt/maven \
&& unzip -d /opt/maven /tmp/apache-maven-${MAVEN_VERSION}.zip \
&& export M2_HOME=/opt/maven/apache-maven-${MAVEN_VERSION} \
&& export PATH=${PATH}:${M2_HOME}/bin \
&& echo "export M2_HOME=/opt/maven/apache-maven-${MAVEN_VERSION}\n" \
"export PATH=${PATH}:${M2_HOME}/bin" >> ${BASHRC_FILE} \
# && source ${BASHRC_FILE} \
#安装gradle
&& wget -O /tmp/gradle-${GRADLE_VERSION}.zip https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip \
&& mkdir /opt/gradle \
&& unzip -d /opt/gradle /tmp/gradle-${GRADLE_VERSION}.zip \
&& ls /opt/gradle/gradle-${GRADLE_VERSION} \
&& export PATH=${PATH}:/opt/gradle/gradle-${GRADLE_VERSION}/bin \
&& echo "export PATH=${PATH}:/opt/gradle/gradle-${GRADLE_VERSION}/bin" >> ${BASHRC_FILE} \
# && source ${BASHRC_FILE} \
#清理
&& rm -rf /tmp/openjdk-${JDK_VERSION}.tar.gz /tmp/apache-maven-${MAVEN_VERSION}.zip /tmp/gradle-${GRADLE_VERSION}.zip \
#验证
&& echo "node 版本" \
&& node -v \
&& echo "npm 版本" \
&& npm -v \
&& echo "cnpm 版本" \
&& cnpm -v \
&& echo "openjdk 版本" \
&& java -version \
&& echo "maven 版本" \
&& mvn -version \
&& echo "gradle 版本" \
&& gradle -version
ENTRYPOINT ["/usr/bin/dumb-init","/entrypoint"]
CMD ["run","--user=gitlab-runner","--working-directory=/home/gitlab-runner"]
三、手动处理环节
- 由于
Ubuntu
默认没有bash
,在容器中无法执行source
,所以配置的环境变量在容器重启后都会失效,重启容器后需要执行以下命令:
sudo docker exec -it gitlab-runner bash
su gitlab-runner
source /etc/profile
到此,gitlab-runner
的安装环节搞定了。
四、向gitlab注册gitlab-runner
- 执行这个命令,开始注册:
sudo docker exec -it gitlab-runner gitlab-runner register
- 第一项输入
gitlab
地址:http://宿主机docker网卡ip(可通过ifconfig查看):gitlabweb端口
。我输入的是http://172.17.0.1:9001
- 第二项输入
gitlab
端的runner token
:在gitlab
->admin
->runner
可以看到。我输入的是hyNjoW8rpQG7UzC6YEZT
- 接下来的2项随便输入,后面可以自己在
gitlab
的runner
管理中改 - 最后一项是选择执行器(非常重要):有很多方式执行,
gitlab-runner
的文档有对这几个进行详细说明:gitlab-runner executors官网doc文档。我输入的是shell
五、在gitlab中配置gitlab-runner到仓库
第四步
完成后,可以在gitlab
->admin
->runner
页面看到一个gitlab-runner
了。但是还需要2步最后的配置:
- 点击这个
gitlab-runner
右侧的编辑按钮,进去勾选第三项(记得最后点保存修改):
- 最底下有一个
Restrict projects for this runner
在这里加入需要gitlab-runner
作用的项目。
评论区