見出し画像

メインフレーム環境のCOBOLをJenkinsとDockerで実行する

メインフレーム(z/OS)のインターフェースZowe CLIが、Node.jsのパッケージとして提供されているので、このDockerイメージを作ってJenkinsで動かしてみる試みです。

実行環境
Docker Desktop for Mac version 2.4.0.0(48506)
macOS Catalina version 10.15.7
COBOL Programming Course (リンク)

Jenkinsの準備

インストール
Jenkins自体もDockerで動かします。インストール方法は、公式のドキュメント(リンク)が詳しいのでそれに従います。コンテナのJenkinsからDockerを使うため、Docker in Docker(dind)のコンテナも使います。

設定
メインフレームのログイン情報を保存します。ここで設定するIDは、後にPipelineスクリプトで使用します。(参考にしたURL

スクリーンショット 2020-11-08 22.57.29

Gitの準備

DockerfileとJenkinsfileを作成しGitで管理します。Git管理にはVSCodeが便利です。ソースコードが格納されているフォルダを選択するか、GitHubのリポジトリを入力することで、Gitを使い始めることができます。今回はPC(ローカル環境)のGitを使用します。

スクリーンショット 2020-11-03 7.34.27

Dockerfile
以下の内容で保存します。Zowe CLIをDockerイメージにするためのテンプレートです。(参考にしたURL

FROM node:12
RUN npm config set @brightside:registry https://api.bintray.com/npm/ca/brightside
RUN npm install -g @brightside/core@lts-incremental
RUN zowe plugins install @brightside/cics@lts-incremental

Jenkinsfile
以下の内容で保存します。JenkinsのジョブをPipelineスクリプトにしたものです。(参考にしたURL

pipeline {
   agent { dockerfile true }
   environment {
       HOST = "--host 192.86.32.250 --port 10443 --ru false"
   }
   stages {
       stage('local setup') {
           steps {
               withCredentials([usernamePassword(credentialsId: 'eosCreds', passwordVariable: 'pass', usernameVariable: 'user')]) {
                   sh 'zowe profiles create zosmf Jenkins $HOST --user $user --pass $pass --ow'
               }
           }
       }
       stage('test') {
           steps {
               withCredentials([usernamePassword(credentialsId: 'eosCreds', passwordVariable: 'pass', usernameVariable: 'user')]) {
                   script {
                       def stdout = sh(returnStdout: true, script:'zowe jobs submit ds "${user}.JCL(HELLO)" \
                       --rff jobid --rft string --wfo').trim()
                       echo stdout
                       sh "zowe jobs view sfbi $stdout 104"
                   }
               }
           }
       }
   }
}

Pipelineスクリプトの内容について、少し説明します。

agent は、何を使ってBuildするかという設定です。Node.jsのようにDocker Hubに公開されている適切なDockerイメージがあれば、イメージを直接指定することもできますし、今回のようにDockerfileでカスタマイズしたイメージを使うこともできます。

environment は環境の設定です。ここでは、私がいつも使っている”Cobol Programming Course”のHost情報を、環境変数として定義しています。

stages では、BuildをするためのスクリプトをStep by Stepで記述します。今回は、stage('local setup')とstage('test')の2つになります。

stage('local setup')は、メインフレームのログイン情報を設定しています。一度設定すると、その後は何も設定しなくても同じ情報でログインするようになるので便利です。ここで、先にJenkinsに設定したログイン情報と、environment の環境変数を使用しています。

stage('test') は、王道的に"Hello World"のJobを実行しています。

実行

Jenkinsで新規ジョブ作成する
新規ジョブ作成を選択。ジョブの名前を入力し、パイプラインを選択して、画面下部のOKボタンをクリックします。

スクリーンショット 2020-11-03 10.40.49

パイプラインの定義を”Pipeline script from SCM”に設定した後、Gitリポジトリを設定します。下記は、ローカル環境のGitを、Jenkinsコンテナのディレクトリ(/var/cobol)にマウントした場合の例です。その他の項目は初期値でOKです。画面下部の保存ボタンをクリックします。

スクリーンショット 2020-11-03 10.19.55

ジョブの動作確認をする
サイドメニューからビルド実行をクリックします。

スクリーンショット 2020-11-03 11.06.30

しばらくすると実行結果が画面に表示されます。

スクリーンショット 2020-11-09 0.20.45

スクリーンショット 2020-11-09 0.31.24

Hello Worldできました。このジョブでは、まず最初にGitからJenkinsfileを取得します。Jenkinsfileのagent指定に沿って、Dockerfileからagent(Zowe CLI)のイメージを作成し、その後にJenkinsfileに記載したStageを順に実行しています。

Appendix

コンテナのデバッグ
Dockerfileでコンテナを作ったものの、思うような動作をしてくれず、中身を確認したい時があります。そんな時は、下記のコマンドで、コンテナを起動したままにします。(参考にしたURL

$ docker run -itd イメージ bash

その後、下記のコマンドでコンテナにログインし内容を確認します。コンテナはLinuxの仮想マシンなので、ログイン後の操作はLinuxと同様です。

$ docker exec -it コンテナ bash


この記事が気に入ったらサポートをしてみませんか?