1 github协作
1.1 Fork 方式
暂无
1.2 Organizations方式
1.2.1 准备项目
新建组织(创建免费的即可,有每月免费2000分钟)
创建team(不建也是可以,建了容易管理)
添加team成员,在组织下选择team,给team拉队友,队友收到邮件后,同意了就可以加入
仓库转入(原来已有的仓库,进入仓库选择settings,下滑选
Transfer
)或在新建项目
为组织下的仓库添加合作者,配置权限
设置主分支保护,不让其他人直接push到主分支,打开仓库下的settings,选择
branchs
添加
Branch protection rules
1.2.2 开始协作
协作者在组织下找到对应的仓库,克隆仓库到本地
git clone git@github.com:hycBook/bk_python.git
开始编写,完成后提交至新分支,一般命名为
dev_xxx
新分支创建一次就可以,
commit
之后,再push
到自己的dev_xxx
分支
注意:
在修改文件之前一般是先从主分支
拉取最新内容,修改完成后尽早提交,较少冲突
commit
和push
操作都是在自己的dev_xxx
分支,pull
操作是从主分支来到github界面,选择
Pull requests
,在选择New pull request
,选择分支
提交合并请求后,等待合并即可
1.3 合作者
暂无
2 githun actions
Github Actions 是 Github 推出的自动化构建工具,一般来说,CI / CD (持续集成 / 持续部署)都需要自己的计算资源,但 Github Actions 提供免费的计算资源,这是它的优势之一,用户只用操心 workflow 文件,不用关心环境相关的琐碎,便可部署 CI / CD,加速了流程。
在 GitHub Actions 中,一次执行过程被称为一个 workflow,一个 workflow 中可以有一个或者多个 job,job 又由 step 组成,step 中可以执行 action,就是一条条命令
2.1 github同步gitee
一个用于在hub间(例如Github,Gitee)账户代码仓库同步的action
准备步骤
本地生成公钥和秘钥
ssh-keygen -t -C "1832044043@qq.com"
公钥放在gitee
github项目下新建:name=GITEE_PRIVATE_KEY,value=秘钥
gitee生成token
github项目下新建:name=GITEE_TOKEN,value=gitee生成的token
基本用法
steps:
- name: Sync Github Repos To Gitee # 名字随便起
uses: Yikun/hub-mirror-action@master # 使用Yikun/hub-mirror-action
with:
src: github/hycBook # 源端账户名(github),如果是组织的话要用组织名,此时account_type=org
dst: gitee/hycBook # 目的端账户名(gitee),如果是组织的话要用组织名,此时account_type=org
dst_key: ${{ secrets.GITEE_PRIVATE_KEY }} # SSH密钥对中的私钥
dst_token: ${{ secrets.GITEE_TOKEN }} # Gitee账户的私人令牌
account_type: org # 账户类型,
# clone_style: "ssh" # 使用https方式进行clone,也可以使用ssh
debug: true # 启用后会显示所有执行命令
force_update: true # 启用后,强制同步,即强制覆盖目的端仓库
static_list: "bk_index" # 静态同步列表,在此填写需要同步的仓库名称,可填写多个
timeout: '660s' # git超时设置,超时后会自动重试git操作
必选参数
src
需要被同步的源端账户名,如github/kunpengcompute,表示Github的kunpengcompute账户。dst
需要同步到的目的端账户名,如gitee/kunpengcompute,表示Gitee的kunpengcompute账户。dst_key
用于在目的端上传代码的私钥(默认可以从~/.ssh/id_rsa获取),可参考生成/添加SSH公钥或generating SSH keys生成,并确认对应公钥已经被正确配置在目的端。对应公钥,Github可以在这里配置,Gitee可以这里配置。dst_token
创建仓库的API tokens, 用于自动创建不存在的仓库,Github可以在这里找到,Gitee可以在这里找到。
可选参数
account_type
默认为user,源和目的的账户类型,可以设置为org(组织)或者user(用户),该参数支持同类型账户(即组织到组织,或用户到用户)的同步。如果源目的仓库是不同类型,请单独使用src_account_type
和dst_account_type
配置。src_account_type
默认为account_type
,源账户类型,可以设置为org(组织)或者user(用户)。dst_account_type
默认为account_type
,目的账户类型,可以设置为org(组织)或者user(用户)。clone_style
默认为https,可以设置为ssh或者https。当设置为ssh时,你需要将dst_key
所对应的公钥同时配置到源端和目的端。cache_path
默认为'', 将代码缓存在指定目录,用于与actions/cache配合以加速镜像过程。black_list
默认为'', 配置后,黑名单中的repos将不会被同步,如“repo1,repo2,repo3”。white_list
默认为'', 配置后,仅同步白名单中的repos,如“repo1,repo2,repo3”。static_list
默认为'', 配置后,仅同步静态列表,不会再动态获取需同步列表(黑白名单机制依旧生效),如“repo1,repo2,repo3”。force_update
默认为false, 配置后,启用git push -f强制同步,注意:开启后,会强制覆盖目的端仓库。debug
默认为false, 配置后,启用debug开关,会显示所有执行命令。timeout
默认为'30m', 用于设置每个git命令的超时时间,'600'=>600s, '30m'=>30 mins, '1h'=>1 hoursmappings
源仓库映射规则,比如'A=>B, C=>CC', A会被映射为B,C会映射为CC,映射不具有传递性。主要用于源和目的仓库名不同的镜像。
2.2 部署github pages
自动发布到github pages分支(可以自己设置分支)
配置token
github项目下新建:name=TOKEN,value=github生成的token
基本用法
- name: Deploy #步骤4:把编译好的静态目录上传到gh-pages分支上
uses: JamesIves/github-pages-deploy-action@3.1.5 #这里调用第三方依赖,用于上传代码到指定分支上
with:
ACCESS_TOKEN: ${{ secrets.TOKEN }}
BRANCH: gh-pages #github pages 默认的分支
FOLDER: _book #上传文件的目录,我这个目录在根目录下,如果是子目录可以这么写 docs/.vuepress/dist
2.3 发布release
自动创建release,并发布
基本用法
- name: Create GitHub release
uses: marvinpinto/action-automatic-releases@latest
with:
repo_token: ${{ secrets.TOKEN }}
automatic_release_tag: 'ebook_index' # 发布标签
title: ${{ env.ReleaseVersion }}
prerelease: false
files: |
_ebook/* # 发布的目录
2.4 build gitee pages
使用 GitHub Actions 解决了 GitHub 代码自动同步 Gitee 的问题,但我们的博客仓库代码同步到 Gitee 后,并不能像 GitHub 一样自动部署 Pages,如果不使用付费的 Gitee Pages Pro 服务,那我们该怎么实现 Gitee 自动部署 Pages 呢
基本用法
新建一个name=GITEE_PASSWORD, value=gitee登陆密码的secrets
- name: Build Gitee Pages
uses: yanglbme/gitee-pages-action@main
with:
# 注意替换为你的 Gitee 用户名
gitee-username: narutohyc
# 注意在 Settings->Secrets 配置 GITEE_PASSWORD
gitee-password: ${{ secrets.GITEE_PASSWORD }}
# 注意替换为你的 Gitee 仓库,仓库名严格区分大小写,请准确填写,否则会出错
gitee-repo: hycBook/bk_index
# 要部署的分支,默认是 master,若是其他分支,则需要指定(指定的分支必须存在)
branch: gh-pages
3 github
3.1 基本命令
强制覆盖本地文件
# 单条执行
git fetch --all && git reset --hard origin/master && git pull
# 或者试下
git pull --force
4 gitlab runner
GitLab Runner 介绍
GitLab Runner是一个开源项目,用于运行您的作业并将结果发送回GitLab。它与GitLab CI一起使用,GitLab CI是GitLab随附的开源持续集成服务,用于协调作业
GitLab Runner是用Go编写,可以作为单个二进制文件运行,不需要语言特定的要求
GitLab Runner的三种类型
shared:运行整个平台项目的作业(gitlab)
group:运行特定group下的所有项目的作业(group)
specific:运行指定的项目作业(project)
4.1 下载安装
linux手动
curl -LJO "https://gitlab-runner-downloads.s3.amazonaws.com/latest/rpm/gitlab-runner_amd64-fips.rpm" chomd 777 gitlab-runner_amd64-fips.rpm rpm -i gitlab-runner_amd64-fips.rpm
docker方式
4.2 注册runner
点击用户管理--左边点击runner,可以看到界面右边有gitlab的地址和token。这个需要用于后面runner的注册使用
(base) [root@FDBL ~]# sudo gitlab-runner register
INFO[0000] Binary was compiled with FIPS mode, but an external SSL library was not enabled.
Runtime platform arch=amd64 os=linux pid=5898 revision=8ec04662 version=16.3.0
Running in system-mode.
Enter the GitLab instance URL (for example, https://gitlab.com/):
http://192.168.50.128
Enter the registration token:
iqxKz5XTz4w_2RxiSQ5S
Enter a description for the runner:
[FDBL]: for python project
Enter tags for the runner (comma-separated):
py310
Enter optional maintenance note for the runner:
WARNING: Support for registration tokens and runner parameters in the 'register' command has been deprecated in GitLab Runner 15.6 and will be replaced with support for authentication tokens. For more information, see https://gitlab.com/gitlab-org/gitlab/-/issues/380872
Registering runner... succeeded runner=tKejdsiT
Enter an executor: instance, kubernetes, custom, parallels, shell, virtualbox, docker+machine, docker, docker-windows, ssh, docker-autoscaler:
docker
Enter the default Docker image (for example, ruby:2.7):
python:3.10
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
如果是docker的方式
[root@localhost config]# docker exec -it gitlab-runner bash
root@24dc60abee0b:/# gitlab-runner register
# 同上
4.3 挂载
打开/etc/gitlab-runner/config.toml
,添加volumes配置
concurrent = 4
check_interval = 0
shutdown_timeout = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "for python project"
url = "http://192.168.0.143"
id = 947
token = "xxx"
token_obtained_at = 2023-08-21T02:17:13Z
token_expires_at = 0001-01-01T00:00:00Z
executor = "docker"
[runners.cache]
MaxUploadedArchiveSize = 0
[runners.docker]
tls_verify = false
image = "centos:7"
privileged = false
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/cache", "/home/pypi_packages:/var/pypi_packages"]
shm_size = 0
volumes是将/home/pypi_packages
映射到/var/pypi_packages
中,concurrent = 4
表示并行的数量
修改成立即生效sudo gitlab-runner verify
4.4 .gitlab-ci.yml
实现一个自动化编译python,并将打包的好的发布到仓库,如果需要自定义变量可以用$env_name
访问在CI/CD配置的变量
image: python:3.10
stages:
- build
build:
stage: build
script:
- python setup.py sdist bdist_wheel
- cp -R dist/* /var/pypi_packages/
- touch ~/.pypirc
- 'echo "[distutils]" >> ~/.pypirc'
- 'echo "index-servers" = >> ~/.pypirc'
- 'echo " local" >> ~/.pypirc'
- 'echo "" >> ~/.pypirc'
- 'echo "[local]" >> ~/.pypirc'
- 'echo "repository: 192.168.xx.xx:8282" >> ~/.pypirc'
- 'echo "username: $u_name" >> ~/.pypirc'
- 'echo "password: $u_pd" >> ~/.pypirc'
# - python setup.py sdist bdist_wheel upload -r http://192.168.xx.xx:8282
# - pip install --extra-index-url http://192.168.xx.xx:8282/simple/ --trusted-host 192.168.xx.xx:8282 twine==4.0.2
# - twine upload dist/*
artifacts:
paths:
- dist/
only:
- dev # 或者您的主分支的名称,比如 "master"
# 告诉 Runner 我们应用哪个标签
tags:
- global_py310
#方式一
# - python setup.py sdist bdist_wheel
# - cp -R dist/* /var/pypi_packages/
#方式二
# variables:
# TWINE_USERNAME: $TWINE_USERNAME
# TWINE_PASSWORD: $TWINE_PASSWORD
# script:
# - touch ~/.pypirc
# - 'echo "[distutils]" >> ~/.pypirc'
# - 'echo "index-servers" = >> ~/.pypirc'
# - 'echo " local" >> ~/.pypirc'
# - 'echo "" >> ~/.pypirc'
# - 'echo "[local]" >> ~/.pypirc'
# - 'echo "repository: 192.168.xx.xx:8282" >> ~/.pypirc'
# - 'echo "username: $u_name" >> ~/.pypirc'
# - 'echo "password: $u_pd" >> ~/.pypirc'
# - python setup.py sdist bdist_wheel upload -r http://192.168.135.201:8282
#方式三
# - python setup.py sdist bdist_wheel
# - pip install --extra-index-url http://192.168.135.201:8282/simple/ --trusted-host 192.168.135.201:8282 twine==4.0.2
# - twine upload dist/*