"/>
侧边栏壁纸
博主头像
PySuper博主等级

千里之行,始于足下

  • 累计撰写 204 篇文章
  • 累计创建 14 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

DevOps | GitLab CI/CD | Runner | Pipline | gitlab-ci.yml

PySuper
2021-08-15 / 0 评论 / 1 点赞 / 30 阅读 / 11331 字
温馨提示:
所有牛逼的人都有一段苦逼的岁月。 但是你只要像SB一样去坚持,终将牛逼!!! ✊✊✊

CI/CD 流程图

GitLan 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
GitLan CI/CD

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,就不需要在使用虚拟环境了

下载镜像的时候,使用本地Harbor中的镜像

  • 在GitLab的服务器上登录Harbor
  • 把镜像上传到Harbor服务器上
GitLan CI/CD
- 修改CI文件
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

GitLan CI/CD
# 把这个文件中的所有文件全部删除了,就可以了
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
1

评论区