前言
这里必须来个说明,太折腾了
这个gitlab-runner折腾我好久,诸多问题,虽然目前通过各种尝试找到了解决方案,但是并不方便,并不是最佳方案,还有诸多问题目前我没搞明白,工作较忙,时间原因,暂时如此,后续找时间再作研究
dockerfile 构建nodejs资料
https://blog.csdn.net/Pursudu/article/details/75006506
【nodejs 包下载地址】
https://nodejs.org/en/download/
wget https://nodejs.org/dist/v12.14.0/node-v12.14.0-linux-x64.tar.xz
dockerfile 构建nginx资料
https://www.cnblogs.com/20143605--pcx/p/10305680.html
【nginx-1.14.0.tar.gz下载地址】
wget http://nginx.org/download/nginx-1.14.0.tar.gz
【pcre-8.37.tar.gz下载地址】
wget https://nchc.dl.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
Dockerfile之构建gitlab-runner+nodejs+nginx 的dockfile脚本
以下脚本是我经过消化后组合的https配置的脚本
后面对应的 docker-compose.yml 脚本链接
https://www.jianshu.com/p/79dc57956aa8
FROM gitlab/gitlab-runner
ADD node-v12.14.0-linux-x64.tar.xz /usr/local
ENV PATH $PATH:/usr/local/node-v12.14.0-linux-x64/bin
ENV DEBIAN_FRONTEND noninteractive
# 将nginx以及pcre源代码加入镜像
ADD nginx-1.14.0.tar.gz /usr/local/src/
ADD pcre-8.37.tar.gz /usr/local/src/
# 安装编译器
RUN apt-get update
RUN apt-get install gcc -y
RUN apt-get install g++ -y
RUN apt-get install make -y
RUN apt-get install openssl -y
RUN apt-get install libssl-dev -y
# 指定工作目录
WORKDIR /usr/local/src/nginx-1.14.0/
# 编译nginx
RUN ./configure --prefix=/usr/local/nginx --without-http_gzip_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.37 && make && make install
# RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
ADD nginx.conf /usr/local/nginx/conf/nginx.conf
ADD https.conf /usr/local/nginx/conf/conf.d/https.conf
# 设置环境变量
ENV PATH /usr/local/nginx/sbin:$PATH
# 加入gitlab-runner激活脚本,每次启动容器时,都要激活gitlab-runner,否则gitlab-ci/cd跑gitlab-runner时找不到活动的gitlab-runner,就会一直处于pendding状态
ADD gitlab-runner-default.sh /home/gitlab-runner-default.sh
# 容器默认启动命令
ENTRYPOINT ["sh","/home/gitlab-runner-default.sh"]
# 建立软链接的脚本,一定要建立软链接,否则gitlab-ci/cd跑gitlab-runner时会找不到容器中安装的环境的相关指令
RUN npm install -g cnpm --registry=https://registry.npm.taobao.org && \
ln -s /usr/local/node-v12.14.0-linux-x64/bin/node /usr/bin/node && \
ln -s /usr/local/node-v12.14.0-linux-x64/bin/npm /usr/bin/npm && \
ln -s /usr/local/node-v12.14.0-linux-x64/bin/npx /usr/bin/npx && \
ln -s /usr/local/node-v12.14.0-linux-x64/bin/cnpm /usr/bin/cnpm
# 把gitlab-runner加入root用户组,这样gitlab-ci/cd在跑gitlab-runner的时候就有权限处理它自身意外的目录文件了
# 先将gitlab-runner用户加入root组
RUN usermod -g root gitlab-runner
# 再将gitlab-runner用户的UID修改成root一样的UID,这样gitlab-runner就拥有了跟root一样的权限了
# 这里一定要加上 -o 不然回提示uid为0的用户已存在
RUN usermod -u 0 -o gitlab-runner
其中的 gitlab-runner-default.sh 脚本
(功能很简单,每次容器启动都启动nginx和gitlab-runner)
(注意:目前这个 gitlab-runner restart 测试下来并没有啥用,重启gitlab-runner容器后,gitlab-runner还是会没有激活,每次重启容器还是要在宿主机上执行这条指令来激活 【docker exec -it gitlab-runner-vue gitlab-ci-multi-runner restart】)
nginx
gitlab-runner restart
其中的 nginx.conf 文件
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#access_log logs/access.log main;
sendfile on;
keepalive_timeout 65;
include /usr/local/nginx/conf/conf.d/*.conf;
}
daemon off;
其中的 https.conf 文件
这里的监听端口号,要与后面的 docker-compse.yml 创建的脚本文件映射的端口保持一致
https://www.jianshu.com/p/79dc57956aa8
server {
listen 6606;
server_name localhost;
ssl on;
ssl_certificate /cert/2423367_www.micking.top.pem;
ssl_certificate_key /cert/2423367_www.micking.top.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1.2;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
location / {
root /home/web;
index index.html index.htm index.nginx-debian.html;
try_files $uri $uri/ /index.html;
}
}
安装过程中遇到这样的问题
配置https的ssl证书时,网上的那份nginx安装资料里没有加入nginx所需的ssl模块,所以容器运行报错:nginx无法识别 ssl 指令,所以百度了,要安装 openssl 和 penssl-devel,可是其中的 penssl-devel 在gitlab-runner中安装失败,gitlab-runner容器是基于ubuntu,所以我百度unbuntu apt 安装 openssl,就搜到了答案
https://zhidao.baidu.com/question/617772603179405372.html
https://yq.aliyun.com/articles/523935
sudo apt-get install openssl
sudo apt-get install libssl-dev
RedHat、centos才是openssl-devel
然后就搞定了https的配置
怎么使用指令编译配置nginx的ssl模块的资料
https://blog.csdn.net/weixin_38111957/article/details/81283121
网友评论