github协作

GitHub 多人协作开发三种方式

Fork 方式

暂无

Organizations方式

准备项目

新建组织(创建免费的即可,有每月免费2000分钟)

img

创建team(不建也是可以,建了容易管理)

img
img

添加team成员,在组织下选择team,给team拉队友,队友收到邮件后,同意了就可以加入

img

仓库转入(原来已有的仓库,进入仓库选择settings,下滑选Transfer)或在新建项目

img
img

为组织下的仓库添加合作者,配置权限

img

设置主分支保护,不让其他人直接push到主分支,打开仓库下的settings,选择branchs

添加Branch protection rules

img

开始协作

协作者在组织下找到对应的仓库,克隆仓库到本地

1
git clone git@github.com:hycBook/bk_python.git

开始编写,完成后提交至新分支,一般命名为dev_xxx

img

新分支创建一次就可以,commit之后,再push到自己的dev_xxx分支

注意:在修改文件之前一般是先从主分支拉取最新内容,修改完成后尽早提交,较少冲突

commitpush操作都是在自己的dev_xxx分支,pull操作是从主分支来

到github界面,选择Pull requests,在选择New pull request,选择分支

img

提交合并请求后,等待合并即可

合作者

暂无

githun actions

Github Actions 是 Github 推出的自动化构建工具,一般来说,CI / CD (持续集成 / 持续部署)都需要自己的计算资源,但 Github Actions 提供免费的计算资源,这是它的优势之一,用户只用操心 workflow 文件,不用关心环境相关的琐碎,便可部署 CI / CD,加速了流程。

在 GitHub Actions 中,一次执行过程被称为一个 workflow,一个 workflow 中可以有一个或者多个 job,job 又由 step 组成,step 中可以执行 action,就是一条条命令

github同步gitee

Hub Mirror Action

一个用于在hub间(例如Github,Gitee)账户代码仓库同步的action

准备步骤

  1. 本地生成公钥和秘钥

    1
    ssh-keygen -t -C "1832044043@qq.com"
  2. 公钥放在gitee

  3. github项目下新建:name=GITEE_PRIVATE_KEY,value=秘钥

  4. gitee生成token

  5. github项目下新建:name=GITEE_TOKEN,value=gitee生成的token

基本用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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_typedst_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 hours
  • mappings 源仓库映射规则,比如’A=>B, C=>CC’, A会被映射为B,C会映射为CC,映射不具有传递性。主要用于源和目的仓库名不同的镜像。

部署github pages

GitHub Pages Deploy Action

自动发布到github pages分支(可以自己设置分支)

配置token

github项目下新建:name=TOKEN,value=github生成的token

基本用法

1
2
3
4
5
6
- 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

发布release

action-automatic-releases@latest

自动创建release,并发布

基本用法

1
2
3
4
5
6
7
8
9
- 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/* # 发布的目录

build gitee pages

Gitee 如何自动部署 Pages?还是用 GitHub Actions!

使用 GitHub Actions 解决了 GitHub 代码自动同步 Gitee 的问题,但我们的博客仓库代码同步到 Gitee 后,并不能像 GitHub 一样自动部署 Pages,如果不使用付费的 Gitee Pages Pro 服务,那我们该怎么实现 Gitee 自动部署 Pages 呢

基本用法

新建一个name=GITEE_PASSWORD, value=gitee登陆密码的secrets

1
2
3
4
5
6
7
8
9
10
11
- 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

github

基本命令

强制覆盖本地文件

1
2
3
4
5
# 单条执行
git fetch --all && git reset --hard origin/master && git pull

# 或者试下
git pull --force

要将 Git 仓库回退到指定版本

1
2
3
4
5
6
7
8
# 使用以下命令查看提交历史,以找到你想要回退到的版本的哈希
git log

# 使用 git reset 将仓库回退到指定的提交哈希
git reset --hard <commit-hash>

# 如果你需要更新远程仓库(注意,这会覆盖远程历史),使用强制推送
git push origin <branch-name> --force

gitlab runner

GitLab Runner 介绍

GitLab Runner是一个开源项目,用于运行您的作业并将结果发送回GitLab。它与GitLab CI一起使用,GitLab CI是GitLab随附的开源持续集成服务,用于协调作业

GitLab Runner是用Go编写,可以作为单个二进制文件运行,不需要语言特定的要求

GitLab Runner的三种类型

  • shared:运行整个平台项目的作业(gitlab)

  • group:运行特定group下的所有项目的作业(group)

  • specific:运行指定的项目作业(project)

下载安装

下载安装 Install GitLab Runner manually on GNU/Linux(依赖docker)

  1. linux手动

    1
    2
    3
    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
  2. docker方式

    Run GitLab Runner in a container

注册runner

gitlab runner 注册

点击用户管理—左边点击runner,可以看到界面右边有gitlab的地址和token。这个需要用于后面runner的注册使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
(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的方式

1
2
3
[root@localhost config]# docker exec -it gitlab-runner bash
root@24dc60abee0b:/# gitlab-runner register
# 同上

挂载

gitlab runner高级设置

打开/etc/gitlab-runner/config.toml,添加volumes配置

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
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

.gitlab-ci.yml

.gitlab-ci.yml keyword reference

gitlab—内置的环境变量、自定义环境变量

验证您的GitLab CI配置(语法检验)

实现一个自动化编译python,并将打包的好的发布到仓库,如果需要自定义变量可以用$env_name访问在CI/CD配置的变量

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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/*