【Github学习笔记】Github

Github学习目标

  1. 了解git常用概念/命令/操作、分支操作:创建、合并、删除等
  2. 了解工作区、暂存区、本地仓库、远程仓库的概念、标签概念
  3. 了解github代码仓库,github action,参考GitHub Actions documentation

作业
① 写下对工作区、暂存区、本地仓库、远程仓库的理解,并阐述哪些命令可以使文件在这些区域内切换。
② 在自己的gihub账号下新建一个仓库,把Docker学习计划中的Python代码上传到该仓库。

  • 不能直接合入master,需要创建一个新分支,并开启PR,请求 @Review
  • 环境变量写入 .env中,并把文件 .env添加到忽略文件,不要上传
  • 列出过程中使用到的git命令

③利用Github action实现合入主分支时,执行Docker build image,并打上review时评论的tag,推送到个人Dockerhub仓库, 实在遇到困难时,可以参考现有的CI/CD流程实现

④ 编写一个Runner,当合入主分支时,自动部署/更新到学习服务器上。参考 About self-hosted runners



一、安装部署

Debian/Ubuntu Git 安装命令为:

$ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev

$ apt-get install git

$ git --version
git version 1.8.1.2

二、工作区、暂存区、仓库区、远程仓库、标签

Workspace: 工作区,就是你平时存放项目代码的地方
Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
Repository: 仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数据 ,其中HEAD指向最新放入仓库的版本
Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换
在这里插入图片描述

标签的使用

# 添加标签
$ git tag v1.0.0

# 查看标签
$ git tag
v1.0.0

# 搜索标签
$ git tag -l v1.*
v1.0.0

# 删除标签
git tag -d v1.0.0

# 推送标签
git push –-tags

追加标签,分辨版本

datalab@datalabvm12:~/pyDemo$ git tag -a prtest2 7d9776d
datalab@datalabvm12:~/pyDemo$ git push origin prtest2
Enumerating objects: 1, done.
...
To github.com:Power099/pydocker-test.git
 * [new tag]         prtest2 -> prtest2
datalab@datalabvm12:~/pyDemo$ 

三、linux上传代码到github仓库

1.设置用户名和邮箱

datalab@datalabvm12:~/pyDemo$ git config --global user.name "Power099"
datalab@datalabvm12:~/pyDemo$ git config --global user.email "1342170594@qq.com"
datalab@datalabvm12:~/pyDemo$ git config --list
user.name=Power099
user.email=1342170594@qq.com

2.建立服务器和Github的SSH链接

(1)生成本地SSH Keys

使用 ssh-keygen -t rsa -C <密钥注释>" 命令生成密钥,-t 参数为密钥类型;-c 参数为密钥注释,一般填写自己的邮箱

datalab@datalabvm12:~/pyDemo$ ssh-keygen -t rsa -C "1342170594@qq.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/datalab/.ssh/id_rsa): 
Created directory '/home/datalab/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/datalab/.ssh/id_rsa
Your public key has been saved in /home/datalab/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 1342170594@qq.com
The key's randomart image is:
+---[RSA 3072]----+
|..+oo.+o   ..+   |
|.+.*   o. . + .  |
|XXXXXXXXXXXXXXXXX|
|*o+  o + .     ..|
|+B    o S     .  |
|XXXXXXXXXXXXXXXXX|
|.E.   o o     o  |
|o.   . o o . o   |
|o       . . . oo.|
+----[SHA256]-----+

之后会系统会提示key的保存位置(一般是~/.ssh目录)和指定口令,保持默认即可,连续三次回车之后系统会显示生成的密钥路径

(3)添加本地SSH Keys 到远程仓库

进入上一步显示的路径(到.ssh),使用 cat 命令复制目录下 id_rsa.pub 文件内的内容,然后添加到 Github 中
Github右上角头像->setting->SSH and GPG keys->new SSH key
title 标题可以随便填,key 粘贴在你电脑上生成的 key

(4)验证连接

ssh -T git@github.com 命令验证是否成功,如有以下显示则成功

datalab@datalabvm12:~/.ssh$ ssh -T git@github.com
The authenticity of host 'github.com (20.205.243.166)' can't be established.
ECDSA key fingerprint is XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'github.com,20.205.243.166' (ECDSA) to the list of known hosts.
Hi Power099! You've successfully authenticated, but GitHub does not provide shell access.

3.环境变量写入.env文件中,并把.env文件添加到忽略文件

(1)将环境变量写入.env文件中

datalab@datalabvm12:~/pyDemo$ cat .env
# mariadb pydocker
MARIADB_ROOT_PASSWORD=123456
MARIADB_USER=datalab
MARIADB_PASSWORD=123456
MARIADB_DATABASE=testdb
MARIADB_PORT=3307
MARIADB_HOST=10.80.28.13

docker-compose.yml文件

datalab@datalabvm12:~/pyDemo$ cat docker-compose.yml
version: "3"
services:
       ...
                environment: 
                        - MARIADB_USER
                        - MARIADB_DATABASE    
                        - MARIADB_PASSWORD
                        - MARIADB_PORT
                        - MARIADB_HOST      
       ...

(2)将.env文件写入.gitignore文件

datalab@datalabvm12:~/pyDemo$ cat .gitignore
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

4.上传项目到指定远程分支

(1)进入项目根目录,并执行 git init 命令初始化Git

datalab@datalabvm12:~/pyDemo$ git init
Initialized empty Git repository in /home/datalab/pyDemo/.git/

(2)使用 git remote add origin [仓库地址] 命令关联远程仓库:

datalab@datalabvm12:~/pyDemo$ git remote add origin git@github.com:Power099/pydocker-test.git

其中 origin为远程仓库别名,后期上传代码直接使用别名上传代码,就不需要每次输入仓库地址了。
使用 git remote -v 命令查看远程仓库地址及名称

datalab@datalabvm12:~/pyDemo$ git remote -v
origin  git@github.com:Power099/pydocker-test.git (fetch)
origin  git@github.com:Power099/pydocker-test.git (push)

(3)将本地代码添加到本地Git缓存区

git add .

Git 的 add 有三种形式:

  1. git add . :他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。
  2. git add -u :他仅监控已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file),(git add --update的缩写)
  3. git add -A :是上面两个功能的合集(git add --all的缩写)

(4)将缓存区内容添加到本地仓库

通过如下命令将本地缓存区的内容添加到本地仓库并添加注释:

datalab@datalabvm12:~/pyDemo$ git commit -m "pydocker"
[master (root-commit) 8d342ba] pydocker
 7 files changed, 301 insertions(+)
 create mode 100644 Dockerfile
 create mode 100644 README.md
 create mode 100644 docker-compose.yml
 create mode 100644 hello.py
 create mode 100644 py_mariadb.py
 create mode 100644 requirements.txt
 create mode 100644 wait-for

(5)推送新分支与数据到远端仓库

(需提前Github创建master分支,否则新建分支会替代master变为default分支)
使用 git checkout -b [Branch Name] 命令来创建一个分支:
git push [alias] [branch] 命令将你的 [branch] 分支推送成为 [alias] 远程仓库上的 [branch] 分支,实例如下。

datalab@datalabvm12:~/pyDemo$ git push origin brtest 
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 8 threads
Compressing objects: 100% (7/7), done.
Writing objects: 100% (9/9), 3.58 KiB | 3.58 MiB/s, done.
Total 9 (delta 0), reused 0 (delta 0)
To github.com:Power099/pydocker-test.git
 * [new branch]      brtest -> brtest

(6)将远程仓库内容更新到本地

git pull origin

5.开启Pull Requests,请求 @Review

拉取你要@Review的成员:Setting->collaborators->Add people
网页打开Github仓库->Pull requests->Compare & pull requests->右侧设置Assignees和Reviewers
新

6.Git把当前分支上的修改转移到其他分支上

①先在当前分支commit

git add .
git commit -m "CV-596-Yield-histogram-statistics:test 01"
[CV-596-Yield-histogram-statistics e04b299] CV-596-Yield-histogram-statistics:test 01
 6 files changed, 192 insertions(+), 6 deletions(-)
 create mode 100644 tests/dao/test_machine_group_dao.py

②获取本次commit的ID或者开头的hash码e04b299

git rev-parse HEAD

③切换到其他分支

git checkout CV-640-Configure-machine-group

④在新分支上执行 cherry-pick

git cherry-pick e04b299

⑤所有修改过的代码已提交到了当前新分支

四、[Actions]合入主分支时推送到DockerHub个人仓库

GitHub Actions 供了一个高效易用的 CI/CD(持续集成、持续部署)工作流,帮助我们自动构建、测试、部署我们的代码。

1.Commond fields

github.event.issue.title
github.event.issue.body
github.event.pull_request.title
github.event.pull_request.body
github.event.comment.body
github.event.review.body
github.event.review.state
github.event.review_comment.body
github.event.pages.*.page_name
github.event.commits.*.message
github.event.head_commit.message
github.event.head_commit.author.email
github.event.head_commit.author.name
github.event.commits.*.author.email
github.event.commits.*.author.name
github.event.pull_request.head.ref
github.event.pull_request.head.label
github.event.pull_request.head.repo.default_branch
github.head_ref

2.完整代码

name: Docker Image CI

on:
  pull_request_review:
     types:
       - submitted
       - edited
 
jobs:

  build:
    if: ${{ github.event.review.state == 'approved' && contains(github.event.review.body, 'release-') && github.event.pull_request.base.ref == 'master' }}   
    runs-on: ubuntu-latest

    steps:
      - name: Checkout Source
        uses: actions/checkout@v3
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v2
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v2
      - name: Login to Docker Hub
        uses: docker/login-action@v2
        with:
          username: airasuka
          password: ${{ secrets.DOCKER_HUB_PWD }}
      - name: Build and push
        uses: docker/build-push-action@v4
        with:
          push: true
          tags: airasuka/pydocker:${{ github.event.review.body }}

3.逐句理解

事件(event)命名

name: Docker Image CI

设置触发器,在遇到pull_request_review 事件 submitted或edited时启动工作流,多个触发器在 任一条件触发 时都会启动工作流

on:
  pull_request_review:
     types:
       - submitted
       - edited

作业(job),添加if语句筛选 审查状态为通过 && 审查评论包含’release-’ && 拉取请求的合并分支是master

jobs:
 build: # 作业命名,自定义
   if: ${{ github.event.review.state == 'approved' && contains(github.event.review.body, 'release-') && github.event.pull_request.base.ref == 'master' }}   
   runs-on: ubuntu-latest

作业步骤(steps)

    steps:

actions/开头表明引用官方的action方法,方法库可以在右方直接搜索,也可以查看 Marketplace
在这里插入图片描述
如果下文中需要引用官方action,则需要加入步骤actions/checkout@v3,其中v3为版本号

      - name: Checkout Source
        uses: actions/checkout@v3

与上一步同理,如果需要引用docker官方合作的action方法需要加以下两步

      - name: Set up QEMU
        uses: docker/setup-qemu-action@v2
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v2

登录DockerHub,其中secert变量可以保护私密信息以 *** 的形式输出
设置secrets变量:Repository->Settings->Secrets and variables
secrets调用案例:${{ secrets.DOCKER_HUB_PWD }}

      - name: Login to Docker Hub
        uses: docker/login-action@v2
        with:
          username: airasuka
          password: ${{ secrets.DOCKER_HUB_PWD }}

构建与推送,tag格式:账号名/仓库名(镜像名):标签,更详细的调用见 Build and push Docker images

      - name: Build and push
        uses: docker/build-push-action@v4
        with:
          push: true
          tags: airasuka/pydocker:${{ github.event.review.body }}

4.运行测试

(可选)因为触发设定是拉取评论+合入主分支,可以在Repository->Setting->Branches->add branch protection rule中设置master分支规则Require a pull request before merging->require number of approvals before merging 即在合并前必须设置一个审阅人,但是必须在组织内或公开仓库
pull_requests->添加审阅人->切换审阅人账号->Add your review->审阅->评论->批准
在这里插入图片描述

五、编写Runner,当合入主分支时自动部署/更新到服务器上

1.部署runner

Repository->Setting->Actions->Runners->New self-hosted runner,在本机上按提示代码运行命令,完成连接
About self-hosted runners

linux架构参考:

# 查看系统的架构
file /lib/systemd/systemd
/lib/systemd/systemd: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0,
# 比如我的64位就选择x64

2.根据你的需求编写yml文件

.github/workflow/deploy.yml 文件

name: Deploy on server
on:
  push:
    branches: [ "master" ]

jobs:
  deploy:
    runs-on: self-hosted
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
      - name: Run tests
        run: |
          cd /home/datalab/pyDemo
          git pull origin master
          git pull origin brtest
          docker build -t pydocker .
          docker-compose up -d
          docker-compose down

查看运行结果

2023-08-25 03:30:12Z: Running job: deploy
2023-08-25 03:30:38Z: Job deploy completed with result: Succeeded
^CExiting...
Runner listener exit with 0 return code, stop the service, no retry needed.
Exiting runner...
datalab@datalabvm12:~/pyDemo/actions-runner$ cd ..
datalab@datalabvm12:~/pyDemo$ ls
Dockerfile  README.md  Runner-test.txt  actions-runner  docker-compose.yml  py_mariadb.py  requirements.txt  wait-for
datalab@datalabvm12:~/pyDemo$ cat Runner-test.txt
1
2 # 文件内容已更新

3.将自托管运行器应用程序配置为服务

您可以将自托管运行器应用程序配置为服务,以便在计算机启动时自动启动运行器应用程序
1.如果自托管运行器应用程序当前正在运行,请停止该应用程序。
2.使用以下命令安装服务:

sudo ./svc.sh install

或者,该命令采用可选user参数来以不同用户身份安装服务。

./svc.sh install USERNAME

3.启动服务
使用以下命令启动服务:

sudo ./svc.sh start

3.检查服务的状态
使用以下命令检查服务的状态:

sudo ./svc.sh status

有关查看自托管运行器状态的更多信息,请参阅“监控自托管运行器并进行故障排除”。
4.停止服务
使用以下命令停止服务:

sudo ./svc.sh stop

5.卸载服务
如果服务当前正在运行,请停止该服务。
使用以下命令卸载该服务:

sudo ./svc.sh uninstall

学习参考

Git教程
【Git】(1)—工作区、暂存区、版本库、远程仓库
#超详细# linux下 使用 Git 将代码上传到指定分支
Creating a pull request from a fork
如何在 GitHub 提交第一个 pull request
git学习–GitHub上如何进行PR(Pull Request)操作
Features·Code review
如何在GitHub上给项目提PR(Pull Request)
分配议题和拉取请求到其他 GitHub 用户

What is .env ? How to Set up and run a .env file in Node?

Github Actions
GitHub Actions,卧槽!牛批!

Marketplace

使用GitHubRunner

gitflow流程示例
Awesome Actions
Comment Pull Request - GitHub Actions
GitHub Actions security
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值