【Jenkins】【Go】APIの自動ビルド環境を構築した
Jenkinsを使用して、Goで書いたRESTAPIの実行環境を自動ビルドするCI/CD環境を構築しました。その時のメモを残します。
GitHub側での設定
- GitHubでリポジトリを作成し、そのリポジトリのSettingsにあるWebhooksの設定でJenkisnサーバを設定しておく。github-webhook/(最後の " / " がないとちゃんと登録できません。)
Jenkinsの設定
- JenkinsでJobを設定しておく
各種設定項目について載せておきます。
今回、ビルドは”シェルの実行”を選択しています。Pushを受けたら下記画像内に記載しているシェルスクリプトを実行します。
シェルスクリプト全体はこちらです。
ssh jenkins@<APIサーバ>"cd /home/jenkins/go/src/github.com/chittai/<リポジトリ名>; git pull; ps -ef | grep exe/main | grep -v grep | awk '{print \"kill\", \$2}'|sh;bash run.sh > /dev/null 2>&1"
ここで何をやっているかというと、APIサーバのスクリプトを最新化して、前のプロセスをKillして新しいプロセスを稼働しています。
- cd /home/jenkins/go/src/github.com/chittai/<リポジトリ名>; git pull; → スクリプト実行ディレクトリに移動してgit pull で最新のコードを取得します。
- ps -ef | grep exe/main | grep -v grep | awk '{print \"kill\", \$2}'|sh → すでに実行されているプロセスがあったらそのプロセスをkillします(今回はexe/mainを含むプロセス)というのも、今回は載せませんが、今回実行するプログラミはkillしないとポートが既に使用されておりプログラムが実行できないためです。
- bash run.sh > /dev/null 2>&1" → そしてkillが完了したらAPIサーバ上でプログラムを実行します。このシェルスクリプトの内容は下記です。単純にGoで書いたプログラムを実行しています。
/usr/local/go/bin/go run main.go & > /dev/null 2>&1
以上で、Push→ビルドまで自動化できました。テストとか入れてないし、本当にPushトリガでビルドするだけなのですがこれをベースに色々と環境を成長させていこうかなと思います。