gitlab 提交代码自动重启服务/执行脚本/远程服务器脚本

发布时间 2024-01-12 19:19:04作者: 那时一个人

1. 在服务器中安装gitlab-runner

```sh
# https://docs.gitlab.com/runner/install/
apt install gitlab-runner
```

2. 将gitlab-runner 注册到gitlab服务中

```sh
gitlab-runner regitster
# 输入gitlab网址
# 输入描述信息(随意)
# 输入tags (随意)
# 输入 token(从gitlab设置中获取)
# 选择执行器类型: 选shell
```

image

3. 设置执行器不需要指定tags,如果不指定,配置文件中需要指定

image
image

4. 代码仓库中添加文件.gitlab-ci.yml

build-job:
  stage: build
  script:
    - echo "Hello, $GITLAB_USER_LOGIN!"
    - pip3 install paramiko
    - python3 ./script/server_dev/python-linux.py ./script/server_dev/server_dev.conf

5. 添加远程执行代码的文件:

需要自己写一个py文件来远程执行代码,放在自己的项目文件下,或者自己随便放个位置,只要能够执行到

# python-linux.py
import paramiko
import configparser
import sys

CONF = sys.argv
if len(CONF) < 2:
    raise Exception('请输入配置文件名')


def get_conf():
    cf = configparser.ConfigParser()
    cf.read(CONF[1])
    sections = cf.sections()
    list_dict_conf = []
    for opt in sections:
        dev_item = cf.items(opt)
        list_dict_conf.append(dict(dev_item))
    return list_dict_conf


class OdooServer(object):
    def __init__(self, hostname, port, username, password, command=''):
        # 建立一个sshclient对象
        self.ssh = paramiko.SSHClient()
        # 允许将信任的主机自动加入到host_allow 列表,此方法必须放在connect方法的前面
        self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        # 调用connect方法连接服务器
        self.ssh.connect(hostname=hostname, port=port, username=username, password=password)
        self.command = command

    def exec_command(self):
        if not isinstance(self.command, str):
            return None
        stdin, stdout, stderr = self.ssh.exec_command(self.command)
        if stdout:
            print('Return Message:', stdout.read().decode())
        if stderr:
            print('Error Message:', stderr.read().decode())
        self.ssh.close()


if __name__ == '__main__':
    list_config = get_conf()
    for dict_config in list_config:
        print('restart server:', dict_config)
        server = OdooServer(**dict_config)
        server.exec_command()

配置文件格式

[dev]
hostname=192.168.10.10
port = 22
username=root
password=123456
command = shell 脚本