Linux(CentOS7)で、ASP.NET Coreアプリのビルド自動化(1)
ASP.NET Coreアプリを、サービス化することが出来ました。
しかし、まだPHPのお手軽さ加減には、一歩届きません。
PHPでは、ソースを書き換えただけで、すぐに動作が変わってくれます。
が、ASP.NET Coreはビルドしなきゃいけません。
その都度、sshで入って操作するの、面倒です嫌です。
そこで、Gitを経由したビルドの自動化を試みます。
導入するのは、GitBucketとJenkinsです。
javaの導入
ひとまずは、現在インストール済みの全パッケージを、最新に更新します。
[root@centos7 ~]# yum update
続いて、Javaです。
GitBucket, Jenkinsの両方ともJavaアプリなので、先に入れておきます。
このへんを参考に、一番新しいOpenJDK1.8系パッケージを見てみます。
[root@centos7 ~]# yum list | grep java-1.8 java-1.8.0-openjdk.x86_64 1:1.8.0.111-1.b15.el7_2 updates java-1.8.0-openjdk-accessibility.x86_64 1:1.8.0.111-1.b15.el7_2 updates java-1.8.0-openjdk-accessibility-debug.x86_64 java-1.8.0-openjdk-debug.x86_64 1:1.8.0.111-1.b15.el7_2 updates java-1.8.0-openjdk-demo.x86_64 1:1.8.0.111-1.b15.el7_2 updates java-1.8.0-openjdk-demo-debug.x86_64 1:1.8.0.111-1.b15.el7_2 updates java-1.8.0-openjdk-devel.x86_64 1:1.8.0.111-1.b15.el7_2 updates java-1.8.0-openjdk-devel-debug.x86_64 1:1.8.0.111-1.b15.el7_2 updates java-1.8.0-openjdk-headless.x86_64 1:1.8.0.111-1.b15.el7_2 updates java-1.8.0-openjdk-headless-debug.x86_64 java-1.8.0-openjdk-javadoc.noarch 1:1.8.0.111-1.b15.el7_2 updates java-1.8.0-openjdk-javadoc-debug.noarch 1:1.8.0.111-1.b15.el7_2 updates java-1.8.0-openjdk-src.x86_64 1:1.8.0.111-1.b15.el7_2 updates java-1.8.0-openjdk-src-debug.x86_64 1:1.8.0.111-1.b15.el7_2 updates [root@centos7 ~]#
ほうほう、ありますね。
こちらによると、1.8.0-openjdk
,1.8.0-openjdk-headless
を入れておけばよさげ。
また、あとから使う予定のwget
も一緒にインストールします。
[root@centos7 ~]# yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-headless wget 読み込んだプラグイン:fastestmirror epel/x86_64/metalink | 5.0 kB 00:00 epel | 4.3 kB 00:00 --- 中略 --- xorg-x11-font-utils.x86_64 1:7.5-20.el7 xorg-x11-fonts-Type1.noarch 0:7.5-9.el7 完了しました!
どれどれ?
[root@centos7 ~]# java -version openjdk version "1.8.0_111" OpenJDK Runtime Environment (build 1.8.0_111-b15) OpenJDK 64-Bit Server VM (build 25.111-b15, mixed mode)
java、動いてますね。
参考:
参考メモ/CentOS7 の OpenJDK パッケージの構成メモ
GitBucketの導入
バイナリとデータの配置先フォルダを作ります。
[root@centos7 ~]# mkdir -p /home/webroot/gitbucket/bin [root@centos7 ~]# mkdir -p /home/webroot/gitbucket/data
GitBucketのリリースページから、最新版のgitbucket.war
を頂いてきます。
[root@centos7 ~]# cd /home/webroot/gitbucket/bin/ [root@centos7 bin]# wget https://github.com/gitbucket/gitbucket/releases/download/4.7.1/gitbucket.war --2016-12-03 21:14:28-- https://github.com/gitbucket/gitbucket/releases/download/4.7.1/gitbucket.war github.com (github.com) をDNSに問いあわせています... 192.30.253.112, 192.30.253.113 --- 中略 --- 終了しました --2016-12-03 21:15:35-- 経過時間: 1m 7s ダウンロード完了: 1 ファイル、45M バイトを 1m 5s で取得 (707 KB/s)
apacheユーザーが実行出来るよう、所有権を変更しておきます。
[root@centos7 ~]# chown -Rf apache:apache /home/webroot/gitbucket
起動時のデータパスやプレフィクスなどを指定したかったので、tomcat経由でなく直接javaから起動させます。
先だってsystemd
のサービス定義方法を覚えたところなので、早速追加しましょう。
[root@centos7 ~]# vi /etc/systemd/system/gitbucket.service
中身はこんなふうに。
[Unit] Description=GitBucket Service [Service] ExecStart=/usr/bin/java -jar /home/webroot/gitbucket/bin/gitbucket.war --gitbucket.home=/home/webroot/gitbucket/data --port=8002 --prefix=/ WorkingDirectory=/home/webroot/gitbucket/data Restart=always RestartSec=10 SyslogIdentifier=gitbucket User=apache [Install] WantedBy=multi-user.target
サービスを起動してみます。
[root@centos7 bin]# systemctl daemon-reload [root@centos7 bin]# systemctl enable gitbucket Created symlink from /etc/systemd/system/multi-user.target.wants/gitbucket.service to /etc/systemd/system/gitbucket.service. [root@centos7 bin]# systemctl start gitbucket [root@centos7 bin]# systemctl status gitbucket ● gitbucket.service - GitBucket Service Loaded: loaded (/etc/systemd/system/gitbucket.service; disabled; vendor preset: disabled) Active: active (running) since 日 2016-12-04 00:17:42 JST; 10s ago Main PID: 27599 (java) CGroup: /system.slice/gitbucket.service mq27599 /usr/bin/java -jar /home/webroot/gitbucket/bin/gitbucket.w... 12月 04 00:17:45 centos7.local gitbucket[27599]: Using job-store 'org.quartz... 12月 04 00:17:45 centos7.local gitbucket[27599]: 00:17:45.400 [main] INFO o... 12月 04 00:17:45 centos7.local gitbucket[27599]: 00:17:45.400 [main] INFO o... 12月 04 00:17:45 centos7.local gitbucket[27599]: 00:17:45.401 [main] INFO o... 12月 04 00:17:45 centos7.local gitbucket[27599]: [INFO] [12/04/2016 00:17:45... 12月 04 00:17:45 centos7.local gitbucket[27599]: 00:17:45.420 [main] INFO o... 12月 04 00:17:45 centos7.local gitbucket[27599]: 00:17:45.423 [main] INFO o... 12月 04 00:17:45 centos7.local gitbucket[27599]: 2016-12-04 00:17:45.962:INF... 12月 04 00:17:45 centos7.local gitbucket[27599]: 2016-12-04 00:17:45.971:INF... 12月 04 00:17:45 centos7.local gitbucket[27599]: 2016-12-04 00:17:45.971:INF... Hint: Some lines were ellipsized, use -l to show in full.
サービス定義にある、サーバの8002番ポートにブラウザからアクセスしてみます。
GitBucket、起動してます!
参考:
GitHub gitbucket/gitbucket/release
Jenkinsの導入
概ねGitBucketと同じような流れです。
バイナリとデータの配置先フォルダを作ります。
[root@centos7 ~]# mkdir -p /home/webroot/jenkins/bin [root@centos7 ~]# mkdir -p /home/webroot/jenkins/data
Jenkinsバイナリ配布ページから、最新版のjenkins.war
を貰ってきます。
[root@centos7 ~]# cd /home/webroot/jenkins/bin/ [root@centos7 bin]# wget http://mirrors.jenkins-ci.org/war/latest/jenkins.war --2016-12-04 00:35:16-- http://mirrors.jenkins-ci.org/war/latest/jenkins.war mirrors.jenkins-ci.org (mirrors.jenkins-ci.org) をDNSに問いあわせています... 52.202.51.185 --- 中略 --- 100%[======================================>] 68,851,608 986KB/s 時間 1m 47s 2016-12-04 00:37:04 (630 KB/s) - `jenkins.war' へ保存完了 [68851608/68851608]
apacheユーザーが実行出来るよう、所有権を変更しておきます。
[root@centos7 bin]# chown -Rf apache:apache /home/webroot/jenkins
こちらも起動時のプレフィクスを指定したいので、javaから起動させます。
jenkinsサービスを追加します。
[root@centos7 ~]# vi /etc/systemd/system/jenkins.service
中身はこんなふうに。
[Unit] Description=Jenkins Service [Service] ExecStart=/usr/bin/java -jar /home/webroot/jenkins/bin/jenkins.war --httpPort=8003 --prefix=/ WorkingDirectory=/home/webroot/jenkins/data Restart=always RestartSec=10 SyslogIdentifier=jenkins User=root Environment=JENKINS_HOME=/home/webroot/jenkins/data [Install] WantedBy=multi-user.target
環境変数設定Environment
が増えているのがミソです。
GitBucketと違い、開始時にデータフォルダを指定するオプションがありません。
そのためこのあたりを参考に、環境変数でデータフォルダを指定しています。
こういうの、まとめておくとバックアップがラクチンですから。
また、実行権限はroot
にしています。
お行儀の悪い設定ではあるんですが...。
Jenkinsはビルド等のシェルスクリプト実行時、サービス再起動などのroot権限が必要な処理を行います。
root以外のユーザーでJenkinsが実行されている場合、visudo
設定でsudoの認証を回避することになります。
そうすると、セキュリティもクソもないんですよね。
まあ、Jenkinsの攻撃が成功してしまったらオワリだ、ということで、肚を括りましょう:-)
さて、Jenkinsも起動してみましょう。
[root@centos7 ~]# systemctl daemon-reload [root@centos7 ~]# systemctl enable jenkins Created symlink from /etc/systemd/system/multi-user.target.wants/jenkins.service to /etc/systemd/system/jenkins.service. [root@centos7 ~]# systemctl start jenkins [root@centos7 ~]# systemctl status jenkins ● jenkins.service - Jenkins Service Loaded: loaded (/etc/systemd/system/jenkins.service; enabled; vendor preset: disabled) Active: active (running) since 日 2016-12-04 01:43:20 JST; 6s ago Main PID: 28999 (java) CGroup: /system.slice/jenkins.service mq28999 /usr/bin/java -jar /home/webroot/jenkins/bin/jenkins.war -... 12月 04 01:43:24 centos7.local jenkins[28999]: ****************************...* 12月 04 01:43:24 centos7.local jenkins[28999]: ****************************...* 12月 04 01:43:24 centos7.local jenkins[28999]: ****************************...* 12月 04 01:43:24 centos7.local jenkins[28999]: Jenkins initial setup is req.... 12月 04 01:43:24 centos7.local jenkins[28999]: Please use the following pas...: 12月 04 01:43:24 centos7.local jenkins[28999]: efad29c130da48e3980ebc59b032b8ab 12月 04 01:43:24 centos7.local jenkins[28999]: This may also be found at: /...d 12月 04 01:43:24 centos7.local jenkins[28999]: ****************************...* 12月 04 01:43:24 centos7.local jenkins[28999]: ****************************...* 12月 04 01:43:24 centos7.local jenkins[28999]: ****************************...* Hint: Some lines were ellipsized, use -l to show in full.
起動したみたい?
初期設定画面ですね!
参考:
Starting and Accessing Jenkins
Change JENKINS_HOME on Red Hat Linux?
apache-VirtualHost化
ASP.NET Coreアプリに加えて、GitBucketとJenkinsが稼働し始めました。
外部パートナーからのアクセスを考えて、全てapache経由で動くように調整します。
/etc/httpd/conf/httpd.conf
を編集して VirtualHostを3つ作ります。
dotnet.centos7.local
, git.centos7.local
, jenkins.centos7.local
の3つのドメイン名を定義しました。
#---前回追加した箇所をコメントアウト--- #ProxyPreserveHost On #ProxyPass / http://localhost:5000/ #ProxyPassReverse / http://localhost:5000/ #---ここから追記--- #------------------------------------------------------- # Service dotnet.centos7.local #------------------------------------------------------- <VirtualHost *:80> ServerName dotnet.centos7.local ErrorLog /var/log/httpd/dotnet.centos7.local.error.log CustomLog /var/log/httpd/dotnet.centos7.local.access.log common ProxyPreserveHost On ProxyPass / http://localhost:5000/ ProxyPassReverse / http://localhost:5000/ </VirtualHost> #------------------------------------------------------- # Service git.centos7.local #------------------------------------------------------- <VirtualHost *:80> ServerName git.centos7.local ErrorLog /var/log/httpd/git.centos7.local.error.log CustomLog /var/log/httpd/git.centos7.local.access.log common ProxyPreserveHost On ProxyPass / http://localhost:8002/ ProxyPassReverse / http://localhost:8002/ </VirtualHost> #------------------------------------------------------- # Service jenkins.centos7.local #------------------------------------------------------- <VirtualHost *:80> ServerName jenkins.centos7.local ErrorLog /var/log/httpd/jenkins.centos7.local.error.log CustomLog /var/log/httpd/jenkins.centos7.local.access.log common ProxyPreserveHost On ProxyPass / http://localhost:8003/ ProxyPassReverse / http://localhost:8003/ </VirtualHost>
開発用Windows機のhostsファイルにも、上記3ドメインを書き込みます。
ブラウザから、確認してみましょう。
ん、おっけーです!
今回分のソースコードはこちら。
まだ、Visual Studioが生成するテンプレートのままです。
github.com