侧边栏壁纸
博主头像
术业有道之编程博主等级

亦是三月纷飞雨,亦是人间惊鸿客。亦是秋霜去叶多,亦是风华正当时。

  • 累计撰写 99 篇文章
  • 累计创建 50 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

gitlab-runner安装配置

Administrator
2021-08-27 / 0 评论 / 0 点赞 / 353 阅读 / 8333 字

写在前面

最近在玩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的阶段。

  • 首先是项目结构
    gitlab-runnner项目结构
  • 然后是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

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项随便输入,后面可以自己在gitlabrunner管理中改
  • 最后一项是选择执行器(非常重要):有很多方式执行,gitlab-runner的文档有对这几个进行详细说明:gitlab-runner executors官网doc文档。我输入的是shell

五、在gitlab中配置gitlab-runner到仓库

第四步完成后,可以在gitlab->admin->runner页面看到一个gitlab-runner了。但是还需要2步最后的配置:

  • 点击这个gitlab-runner右侧的编辑按钮,进去勾选第三项(记得最后点保存修改):
    gitlab-runnner配置1
  • 最底下有一个Restrict projects for this runner在这里加入需要gitlab-runner作用的项目。

好了到这里配置安装配置都完成了,剩下的部分就是编写pipeline脚本,来完成编译、打包、部署等一系列操作。限于篇幅这部分将在后面的文章中写。

个人公众号

0

评论区