CI/CD 流程图
StaticIP
vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static # 修改为static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=7a42df11-228e-43e6-be81-e08e3ba9b927
DEVICE=ens33
ONBOOT=yes # 修改为yes
# 指定静态IP地址
IPADDR=192.168.111.111
NETMASK=255.255.255.0
GATEWAY=192.168.111.2
DNS1=192.168.111.2
DNS2=114.114.114.114
GitLab
1、添加源
vim /etc/yum.repos.d/gitlab-ce.repo
[gitlab-ce]
name=gitlab-ce
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7
repo_gpgcheck=0
gpgcheck=0
enabled=1
gpgkey=https://packages.gitlab.com/gpg.key
2、更新yum缓存
sudo yum makecache
3、安装依赖
yum install vim curl openssh-server openssh-clients gcc-c++ zlib1g-dev zlib-devel curl-devel expat-devel gettext-devel opgcc perl-ExtUtils-MakeMaker
4、安装GitLab
# 自动安装最新版
sudo yum install gitlab-ce
# 安装指定版本
sudo yum install gitlab-ce-8.8.4-ce.0.el6
5、修改配置
vi /etc/gitlab/gitlab.rb
# 修改成你的访问地址
external_url 'http://000.00.00.00:8081'
# 修改时区
gitlab_rails['time_zone']= 'Asia/Shanghai'
6、收集日志
# 指定日志位置
mv /var/log/gitlab /data/logs/
ln -s /data/logs/gitlab /var/log/gitlab
7、初始化
# 首次启动也需要以下命令加载配置
sudo gitlab-ctl reconfigure
8、启动GitLab
# 启动gitlab
sudo gitlab-ctl restart
9、开机自启
# 开机自启
systemctl enable gitlab-runsvdir.service
10、配置防火墙
# 配置 80端口
firewall-cmd --add-port=80/tcp --permanent
# 重启防火墙
firewall-cmd --reload
11、设置登录密码
# 设置密码
sudo gitlab-rake "gitlab:password:reset[root]"
# 所有的配置在 /etc/gitlab/gitlab.rb 中修改,修改完配置后执行 gitlab-ctl reconfigure 生效
12、生成SSH秘钥
# 生成
ssh-keygen
# 查看(在指定用户目录下)
cat ~/.ssh/id_rsa.pub
13、Docker-image
# runner中使用本地image
vi /etc/gitlab-runner/config.toml
# 在volumes下面添加
pull_policy = "if-not-present"
# 这个文件中的每个runner,都是单独定义的,每个都要单独配置
Git-Runner
1、下载
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
2、添加权限
sudo chmod +x /usr/local/bin/gitlab-runner
3、创建执行者
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
4、安装-运行
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start
5、注册Runner
sudo gitlab-runner register --url http://192.168.111.131/ --registration-token ~~Token~~
CI
1、.gitlab-ci.yml
# 指定runner时候的阶段
stages:
- build
- test
# 自带,每个阶段都会先执行一次
before_script:
# 指定使用的哪个Python环境,防止后面运行的时候,找不到包
- export PYTHONPATH=$PYTHONPATH:/usr/bin/python3
- pip3 install requests
build:
stage: build # 指明是哪个阶段
script: # 要执行的代码
- uname -a
- python3 -V
- echo "Build Succeeded"
tags: # 使用那个tag的runner,在注册runner的时候添加的tag
- python3
test:
stage: test
script:
- python3 test_1.py >> baidu.txt
- cat baidu.txt
tags:
- python3
2、build image
runner的时候使用自己创建的镜像
# GitLab-CI Test
# 使用python:3.8的初始化镜像
FROM python:3.8
# 更新pip的安装源,并安装requests包
RUN pip3 config set install.trusted-host mirrors.aliyun.com && pip3 install requests
# build的时候无法访问网络
yum install -u nano
sudo nano /etc/dhcp/dhclient.conf
# 添加
prepend domain-name-servers 8.8.8.8, 8.8.4.4;
# 重启dhclient
sudo dhclient
# 重启docker
systemctl restart docker.service
创建镜像之后,在使用Runner的时候,需要新建一个
stages:
- build
build:
stage: build
script:
- uname -a
- python3 -V
- pip3 list
- python3 test_1.py > index.txt
- cat index.txt
- echo "Build Succeeded"
tags:
- v2
3、image-pipenv
镜像中使用虚拟环境:pipenv
- 构建镜像的过程中就把虚拟环境配置好
- 在CI的配置文件中,直接指明使用的环境参数
直接使用一个Python-Docker,就不需要在使用虚拟环境了
4、Link Harbor
下载镜像的时候,使用本地Harbor中的镜像
- 在GitLab的服务器上登录Harbor
- 把镜像上传到Harbor服务器上
stages:
- build
# 在这里指明的image是哪里的
image: 192.168.111.136/epgn/gitlab-ci:v2
build:
stage: build
script:
- uname -a
- python3 -V
- pip3 list
- python3 test_1.py > index.txt
- cat index.txt
- echo "Build Succeeded"
tags:
- harbor
- 如果有需要,在修改runner的配置文件
# runner中使用本地image
vi /etc/gitlab-runner/config.toml
# 在volumes下面添加
pull_policy = "if-not-present"
# 这个文件中的每个runner,都是单独定义的,每个都要单独配置
CD
1、创建镜像
Dockerfile
# GitLab-CI Test
# docker build -f Dockerfile -t django:v2 .
FROM 192.168.111.111/epgn/python:3.8
# 维护者信息
MAINTAINER ZhengXingtao
# 文件放在当前目录下,拷过去会自动解压
ADD test_2.tar.gz /usr/local/
# 拷贝文件
COPY requirements.txt .
# 构建镜像时执行的命令
RUN pip3 config set install.trusted-host mirrors.aliyun.com && \
/usr/local/bin/python -m pip install --upgrade pip && \
pip3 install django pymysql
# 指定于外界交互的端口
EXPOSE 8001
# 工作目录,类似于 cd 命令
WORKDIR /usr/local/test_2
# 构建容器后调用,也就是在容器启动时才进行调用。 \
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
Build
# 压缩项目
tar -jcvf test_2.tar.gz test_2
# 创建镜像
docker build -f Dockerfile -t django:v1 .
# 直接启动容器
docker run -dit --name=django --net=host django:v1 /bin/bash
docker run -dit --name=django -p1900:19000 django:v1 /bin/bash
# 进入容器
docker exec -it django1 /bin/bash
# Test
docker stop django && docker rm django && docker rmi django:v1
# 登录
docker login 192.168.111.111 -uzheng -p 123123123
# 改Tag
docker tag django:v1 192.168.111.111/gitlab/django:v1
# push
docker push
Ningx
# 创建Nginx容器
docker run --name nginx -p 8000:80 -d 192.168.111.111/epgn/nginx:v1
2、远程连接
这里使用的是远程登录的方式,完成
持续部署
Error
# 把这个文件中的所有文件全部删除了,就可以了
rm -rf /home/gitlab-runner/builds/RZDb_hKv/0/zheng
SSH
GitLab在Runner中使用的是
gitlab-runner
用户操作的,所以需要切换用户
# 切换到gitlab-runner用户
su - gitlab-runner
# 生成秘钥 ==> 保存在 ~/.ssh/
ssh-keygen
cd ~/.ssh/
# 把文件发送到指定机器上 ==> 在这之前,在指定的机器上创建gitlab-runner用户
ssh-copy-id 192.168.111.111
# 免密登录
ssh 192.168.111.111
Docker
在远程机器上先测试gitlab-runner启动docker,没有权限就提前添加好
# gitlab-runner 用户增加 docker权限
sudo gpasswd -a gitlab-runner docker
# 重启docker
systemctl restart docker
deploy:
stage: deploy
script:
# 设置免密登录, 同时写入在远程机器中执行的代码
# 在这里 删除、下载镜像,关闭、删除容器,建立、启动容器
- ssh -t gitlab-runner@192.168.111.111 "docker restart django"
- echo "Test Server Successfully"
tags:
- Docker
Shell
deploy:
stage: deploy
script:
# 直接使用shell的时候,这里就是一个正常的部署逻辑,只不是都通过远程连接的方式执行
- ssh -t gitlab-runner@192.168.111.110 "uwsgi --ini uwsgi.ini"
- echo "Test Server Successfully"
tags:
- Shell
Demo
image: 192.168.111.111/gitlab/python-django:v1
test:
stage: test
script:
- cp -R test_2 /usr/local/test_2
- cd /usr/local/test_2
- pip3 install uwsgi
- groupadd -r nginx
- useradd -r -g nginx nginx
- python manage.py makemigrations && python manage.py migrate
- uwsgi -d --ini uwsgi.ini
- echo "Build Succeeded"
tags:
- Python3.8
deploy:
stage: deploy
script:
- ssh -t gitlab-runner@192.168.111.111 "docker restart django"
- echo "Test Server Successfully"
tags:
- Shell
评论区