ActPi's Blog

Share & Record

记录程序的执行时间,并进行单位换算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import datetime


def convert_seconds(seconds):
"""
将给定的秒数转换为小时、分钟和秒。
"""
hour = seconds // 3600
minute = (seconds % 3600) // 60
second = seconds % 60
if hour == 0:
if minute == 0:
run_time = f"{second} 秒"
else:
run_time = f"{minute}{second} 秒"
else:
run_time = f"{hour} 小时 {minute}{second} 秒"

return run_time

def main():
start = datetime.datetime.now()
# do something
end = datetime.datetime.now()

run_time = convert_seconds((end-start).seconds)

问题描述

如下 Shell 脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
do somothing

python script.py
#获取Python命令的退出码
e_code=$?
if [ $e_code -noteq 0 ];then
echo "python script.py failed, exit code is $e_code"
exit 1001
else
echo "python script.py success"
exit 0
fi

在 Jenkins 中执行此脚本时,通过 Shell 调用了 Python 脚本,当 Python 脚本内部异常退出例如遇到 sys.exit(1001),导致异常退出码无法抓取。

原因及解决

这是由于 Jenkins 在执行 shell 脚本时,默认会在命令行中加上 -e 选项,该选项的作用是在脚本中遇到错误时会立即退出。这样可以确保在脚本发生错误时及时停止执行,避免继续执行可能导致更严重问题的命令。

在 Shell 脚本前手动添加 set +e 来禁用该选项。即可继续执行后续命令。

PS:Jenkins 在执行 shell 脚本时,默认会在命令行中加上 -xe 选项, 该选项的作用是在脚本运行时打印每一行命令以及运行中遇到错误时会立即退出。这样可以确保在脚本发生错误立即中断。

用于在指定路径查询日志文件并返回对应的完整路径列表

用 os path

1
2
3
4
5
6
7
8
9
10
11
12
13
def get_log_file(log_dir):
"""
从指定目录查找后缀为 .log 的文件
:param log_dir: 待查找的目录
:return: 返回所有的 .log 文件路径列表
"""
log_files = []
for root, dirs, files in os.walk(log_dir):
for file in files:
if file.endswith(".log"):
log_files.append(os.path.join(root,file))

return log_files

用 pathlib

1
2
3
4
5
6
7
8
9
def get_log_file(rootdir):
log_files = []
root_path = Path(rootdir)
print("--->开始到算例库查找算例文件: ")
### find inp
for file in root_path.rglob('*.log'):
log_files.append(file)

return log_files

改动 if file.endswith(".log") 可查找任意后缀的文件。

需求

当向 gitlab 推送 tag 时自动生成 Release 发布包的自动 CI 功能

实现

首先在对应仓库生成一个 Project Access Token,授权 api 和 write_repository 权限,然后在仓库的设置-CI/CD 新增 Variable 名称为 ACCESS_TOKEN、值为上一步生成的 Token。

  1. 当有推送 tag 时、自动触发 gitlab CI 任务
    编写 CI 配置文件 .gitlab-ci.yml

    1
    2
    3
    4
    5
    6
    7
    8
    Create_Release:
    stage: deploy
    tags:
    - runner # 指定runner
    only:
    - tags # 仅对推送 tag 时触发
    script:
    - bash deploy_release.sh
    阅读全文 »

前言

鉴于网络原因 github page 访问加载速度很慢,同时伴随不定时的无法访问,让访问博客的流畅度大受影响。为了保持访问速度和稳定性于是打算将博客使用 Netlify 来构建和发布hexo博客。

步骤

Netlify 是一个提供静态资源网络托管的综合平台,提供CI服务,能够将托管 GitHub,GitLab 等网站上的 Jekyll,Hexo,Hugo 等代码自动编译并生成静态网站。

Netlify 有如下的功能:

  • 能够托管服务,免费 CDN
  • 能够绑定自定义域名
  • 能够启用免费的TLS证书,启用HTTPS
  • 支持自动构建
  • 提供 Webhooks 和 API
    阅读全文 »

起始缘由

原本博客的发布方式为:

  1. 在本地部署好 Hexo 博客的运行环境
  2. 通过 [hexo g] 将写好的 Markdown 文件转化为 HTML 文件
  3. 然后用 [hexo d] 把生成的 public 文件夹内所有内容推送到 Github 仓库中

这样直接将生成的可以运行的实际产物(生产版)推送到 GitHub 仓库上,而不是博客源码(开发版),每当本地环境变更或者想在别的电脑上写文章时就麻烦了、必须得重新部署一遍环境,而且也不会留存历史变更记录。详细参见之前的博文:用 hexo + gitpage 搭建博客以及 gitpage 绑定自定义域名

由此想到,何不把博客源码推送到 Github 仓库中,利用 GitHub 来对源码进行版本控制,同时也利于博客未来的维护、更新!以下就是折腾记录。

阅读全文 »

需求

CentOS 7 的版本安装好之后默认自带的是 gcc 4.8,为了支持编译 c++ 的更高版本需要安装高版本的 gcc,
由于手动下载编译高版本可能会导致一些不可预料的意外情况,故采用安装 devtoolset工 具来解决。

安装步骤

  1. 安装 centos-release-scl
    sudo yum install -y centos-release-scl

  2. 安装 devtoolset,这里可自行对照选择相应的版本号
    sudo yum install -y devtoolset-8

  3. 激活 gcc 环境

    1
    2
    3
    4
    5
    # 当前终端生效,临时使用一次的情况
    scl enable devtoolset-8 bash
    # 永久生效,写入 /etc/profile
    echo "source /opt/rh/devtoolset-8/enable" >> /etc/profile
    source /etc/profile
  4. 验证结果
    gcc -V

yum error

安装 centos-release-scl 后yum 报错:Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64

1
2
3
4
5
6
cd /etc/yum.repos.d/
vim centos-sclo-rh.repo

注释 mirrorlist 行
baseurl 修改为:baseurl=http://vault.centos.org/centos/7/sclo/$basearch/rh/

LVM 简介

LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是 Linux 环境下对磁盘分区进行管理的一种机制。LVM 将一个或多个物理卷(PV)虚拟为一个卷组(VG),相当于一个大的硬盘,我们可以在上面划分一些逻辑卷(LV)。当卷组的空间不够使用时,可以将新的磁盘分区加入进来。也可以从卷组剩余空间上划分一些空间给空间不够用的逻辑卷使用。

扩容场景

通过LVM创建的逻辑卷磁盘空间不足需要新增硬盘进行扩容,大多数情况为添加一块物理磁盘并将此磁盘空间全部添加到指定分区。

阅读全文 »
0%