在z/OS中使用Git的应用(2)- Rocket Git架构

首先

我们将介绍在这里使用 Rocket Git for z/OS 所需的基本配置。

相关文章

在z/OS上使用Git(1)- 概述
在z/OS上使用Git(2)- Rocket Git配置
在z/OS上使用Git(3)- Git案例应用

火箭Git的組成示例

安裝

参考:Rocket Git for z/OS 1.1.1(GI13-4387-05)的程序目录。

在这里不详细介绍安装步骤,但可以使用SMP/E像其他产品一样进行安装。实际上,各种库将会展开在USS文件系统上作为实体存在。

设置环境变量

参考:Rocket Software论坛 – 在z/OS上使用GitHub的git
DBB – 在USS上设置Git

在使用Git的shell中启用以下环境变量。

GIT_ROOT=/usr/lpp/Rocket/rsusr/ported

export GIT_SHELL=$GIT_ROOT/bin/bash
export GIT_EXEC_PATH=$GIT_ROOT/libexec/git-core
export GIT_TEMPLATE_DIR=$GIT_ROOT/share/git-core/templates

export PATH=$GIT_ROOT/bin:$PATH
export MANPATH=$MANPATH:$GIT_ROOT/man
export PERL5LIB=$PERL5LIB:$GIT_ROOT/lib/perl5

# These enable enhanced ASCII support
export _BPXK_AUTOCVT=ALL
export _CEE_RUNOPTS="FILETAG(AUTOCVT,AUTOTAG) POSIX(ON)"
export _TAG_REDIR_ERR=txt
export _TAG_REDIR_IN=txt
export _TAG_REDIR_OUT=txt

補充:

GIT_ROOT: Rocket Gitがインストールされたディレクトリを指定します。

_BPXK_AUTOCVT: ガイドだとONを指定している例がありますが、ALLを指定することをおすすめします(ALLだとUnicodeもサポートされるため)。

参考:BPXK环境变量

创建Config文件

建议在使用Git的用户的主目录下进行与Git使用相关的设置。
建议使用UTF-8格式创建.gitconfig文件,并进行标记(在与Jenkins的集成时需要)。

.gitconfig的示例配置:

[user]
        name = USER01
        email = USER01@example.com
[http]
        sslverify = false
[credential]
        helper = cache --timeout=3600

补充:

http.sslverify=false: SSL通信時の証明書検査を行わないよう設定

credential.helper = chace –timeout=3600: パスワードを一定時間(3600sec)キャッシュする

参考:git参考手册 – git配置

or

参考:git引用 – git配置

.gitattributes文件

在像GitHub这样的远程仓库中,一般需要以UTF-8来保存每个文本数据。然而,在z/OS操作系统上的本地仓库(USS上),通常需要使用EBCDIC编码页(例如ibm-1047)来保存数据。
我们可以通过.gitattributes文件来控制文本文件的编码方式。通常,我们会将该文件放置在项目的根目录下,并指定该项目中每个文件的字符编码属性等信息。
以下是针对每个文件扩展名,在本地仓库(z/OS USS上)和远程仓库(Git 服务器上)之间进行编码映射的示例。

# line endings
* text eol=lf

# file encodings
.gitattributes zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
*.cpy zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
*.cbl zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
*.txt zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
*.sh zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
*.jcl zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
*.log zos-working-tree-encoding=ibm-1047 git-encoding=utf-8

参考:git 的参考资料 – gitattributes。

注意!对于在.gitattributes中有指定的文件,在将更改/添加的文件git add(暂存)时,需要根据.gitattributes文件中的指定进行文件的标记和字符编码指定(如果不匹配,将导致git add出现错误)。

例如,对于像上面这样的.gitattributes设置,需要指定扩展名为txt的文件为IBM-1047。

如果尝试将未标记为标签的文件添加到git中作为文本,则会发生这种情况。

TAGUCHI : /u/TAGUCHI/ISEConf2023_MySample01 : > ls -laT build/ | grep prop.txt
- untagged    T=off -rw-r--r--   1 TAGUCHI  SYS1         115 Apr 22 07:49 prop.txt

TAGUCHI : /u/TAGUCHI/ISEConf2023_MySample01 : > git add build/prop.txt
fatal: can't add "build/prop.txt": file is untagged, set correct file tag

当尝试将.gitattributes与文件的字符编码不同的文件添加到git时。

TAGUCHI : /u/TAGUCHI/ISEConf2023_MySample01 : > ls -laT build/ | grep prop.txt
t IBM-1399    T=on  -rw-r--r--   1 TAGUCHI  SYS1         115 Apr 22 07:49 prop.txt

TAGUCHI : /u/TAGUCHI/ISEConf2023_MySample01 : > git add build/prop.txt
fatal: can't add "build/prop.txt": file tag (IBM-1399) does not match its attributes (IBM-1047)

OK例:根据.gitattributes文件和文件的字符编码执行git add操作。

TAGUCHI : /u/TAGUCHI/ISEConf2023_MySample01 : > chtag -tc IBM-1047 build/prop.txt
TAGUCHI : /u/TAGUCHI/ISEConf2023_MySample01 : > ls -laT build/ | grep prop.txt
t IBM-1047    T=on  -rw-r--r--   1 TAGUCHI  SYS1         115 Apr 22 07:49 prop.txt

TAGUCHI : /u/TAGUCHI/ISEConf2023_MySample01 : > git add build/prop.txt
TAGUCHI : /u/TAGUCHI/ISEConf2023_MySample01 : > git status
On branch wazi_test01
Your branch is up to date with 'origin/wazi_test01'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   build/prop.txt

设定CA证书

在尝试克隆GitHub仓库时,可能会遇到以下错误。

$ git clone https://github.com/xxx/xxx.git
Cloning into 'Lightweight_Command_Utility_on_USS'...
fatal: unable to access 'https://github.com/xxx/xxx.git/': error setting certificate verify locations:  CAfile: /opt/anaconda1anaconda2anaconda3/bin/ca-bundle.crt CApath: none

这是由于GitHub服务器的证书检查没有设置可信任的CA证书所致。您可以像上述设置示例中的方法一样,在.gitconfig文件中将http.sslverify设置为false,从而避免出现错误。但是,如果您想要正确地进行证书信任性检查,您需要将根证书注册为可信任证书。

通过进行以下设置,您可以正确执行证书检查。

(1) 获取证书链

最快的方法是通过浏览器等方式获取。以下是使用FireFox的示例。

image.png
image.png
image.png
image.png
image.png
image.png

将保存的文件以文本模式放置在USS上的适当目录中。

(2) 指定CA证书文件

在.gitconfig文件中,使用http.sslCAInfo参数指定上述获取的pem文件,代替http.sslverify = false。

...
[http]
        proxy = socks5h://127.0.0.1:9901
        sslCAInfo = /u/cics004/Git/github-com-chain.pem
...

这样一来,证书检查应该会正确进行并避免错误。

代理构成示例

z/OS部署在安全网络上,即使是开发环境,也可能存在与外部连接困难的网络配置。例如,只允许特定端口接收外部连接,但限制了从z/OS到外部的连接,这种情况可能存在。

我将介绍一个通过使用SSH隧道和代理技术来将连接到GitServer的Linux机器设置为代理的示例。

image.png
#!/bin/bash

export proxyPort=9901
export sshUser=user01
export sshAddress=zos01

ssh -f -N -R ${proxyPort} -o "StrictHostKeyChecking no" -o "ServerAliveInterval=60" -o "ServerAliveCountMax=3" ${sshUser}@${sshAddress}

補充:

proxyPort: z/OS側でListenするポート番号(任意)

sshUser: SSH接続する際に使用するユーザー

sshAddress: SSH接続する際の宛先(z/OS側)アドレス

通过执行此脚本,将在Linux上建立SSH连接到z/OS,并在z/OS上监听9901端口(使得可以通过代理进行外部访问来请求9901端口)。

在z/OS上配置Git时,您需要在.gitconfig文件中设置代理。端口号应与之前指定的端口号(proxyPort)匹配。

...
[http]
        proxy = socks5h://127.0.0.1:9901
...

使用这个方法,可以通过代理访问Git服务器来进行Git的操作。

※从技术角度来看,这样的配置是可行的,但是否符合安全政策取决于环境,请留意。

Git命令备忘录

本地代码库初始化

git init

确认本地仓库状态

git status

添加远程存储库信息

git remote add origin https://github.com/xxxx/xxx.git

查看远程存储库的信息

git remote -v

将分支名称更改为”main”。

git branch -M main

创建并切换分支

git checkout -b new_branch

查看分支信息

git branch

克隆制作(远程存储库 => 本地存储库)

git clone https://github.com/xxxx/xxx.git

远程代码库的变更信息导入

git pull origin main

将所有更改加入暂存区

git add .

提交已分阶段更改。

git commit -m "comment"

将变更内容同步到远程存储库。

git push origin main
bannerAds