記事ディレクトリ
序文
ソフトウェア開発の成熟に伴い、DevOps は人々の心に深く根付いてきました。DevOps の重要な部分として、自動化されたデプロイメントは常に全員にとって最優先のインフラストラクチャです。実際、自動デプロイメントのためのツールは数多くあり、前回の記事では、Gitlab ファミリの Gitlab Runner を使用して自動デプロイメントを実現することについて書きました。しかし、Gitlab Runner にはプラグインやエコロジーがないという制約があり、Jenkins への移行を試み始めました。この記事では、Jenkins 自動デプロイメントのクイック スタートのみを記録しており、プロセス オーケストレーション、Jenkinsfile、WebHook などの一部の高度な操作については説明しません。
1. ジェンキンスとは何ですか?
Jenkins はオープンソースの自動化サーバーです。これは、構築、テスト、展開に関連するソフトウェア開発の部分を自動化し、継続的統合と継続的デリバリーを促進するのに役立ちます。これは、Apache Tomcat などのサーブレット コンテナーで実行されるサーバーベースのシステムです。AccuRev、CVS、Subversion、Git、Mercurial、Perforce、ClearCase、RTC などのバージョン管理ツールをサポートし、Apache Ant、Apache Maven、sbt ベースのプロジェクトのほか、任意のシェル スクリプトや Windows バッチ コマンドを実行できます。
2. ステップを使用する
2.1. ソフトウェアのインストール
このようなソフトウェアは、何も考えずに Docker を選択することを提案します。
docker run \
-d \
-u root \
-p 8080:8080 \
-v /usr/local/docker/jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$HOME":/home \
--privileged=true \
--restart=always \
--name jendemo \
jenkinsci/blueocean
実行が成功すると、8080 ポートに直接アクセスしてこのインターフェイスを表示できます。
このファイルのパスワードを表示するには、必要に応じてコンテナを入力します。
docker exec -it jendemo bash
cat /var/jenkins_home/secrets/initialAdminPassword
推奨プラグインのインストールを選択します。Jenkins には
デフォルトで Java 11 環境が含まれます。Gradle と Maven が必要な場合は、自分で設定する必要があります。
管理者のユーザー名とパスワードは任意のものにすることができます。
「再起動」をクリックして、しばらく待ちます。プラグインをインストールするたびに Jenkins を再起動する必要があるため、Docker を使用してコマンドを直接再起動できるのは非常に便利です。
再起動後、「システム管理」→「プラグイン管理」に進み、アップグレードする必要があるすべてのプラグインをアップグレードします。Gitlab プラグインと NodeJS プラグインを追加でインストールし、再起動します。
2.2. ソフトウェア構成
システム管理のグローバルツール設定では、Maven、Gradle、NodeJSの環境を選択し、自動インストールを確認できます。ただし、ここには小さな落とし穴があります。つまり、[保存] をクリックした後、直接ダウンロードしてインストールされるのではなく、トリガーが使用された場合にのみインストールされます。たとえば、Maven の場合、自動的にダウンロードするには、新しいジョブで Maven オプションを選択する必要があります。ノードの場合、自動的にダウンロードするには、このオプションをオンにする必要があります。
Jenkins自体は実際にコンテナ内で関連するコマンドを実行するため、環境設定が使いにくいと感じた場合は、自分で設定してコンテナにインストールすることも可能です。
3. 春のプロジェクト
3.1. プロジェクトの構築
Jenkins は、2 番目の手順に従って構成した後、直接使用できます。検証のために、Gitlab で新しいプロジェクトを作成し、SpringWeb を確認して、コントローラーを作成します。
@RestController
public class GreetingController {
@GetMapping("/greeting")
public String greeting() {
return "Hello Jenkins!";
}
}
docker
ルート ディレクトリにフォルダーを作成し、Dockerfile
その中にファイルを置きます。
# 指定是基于哪个基础镜像
FROM java:8
# 作者信息
MAINTAINER Peach
# 挂载点声明
VOLUME /tmp
# 将本地的一个文件或目录,拷贝到容器的文件或目录里
ADD /build/libs/demo-0.0.1-SNAPSHOT.jar springboot.jar
#shell脚本
RUN bash -c 'touch /springboot.jar'
# 将容器的8000端口暴露,给外部访问。
EXPOSE 8080
# 当容器运行起来时执行使用运行jar的指令
ENTRYPOINT ["java", "-jar", "springboot.jar"]
注:我这里的Spring是用Gradle依赖的,如果用maven请自行替换Jar包位置和构建命令
3.2. Jenkins の設定
Jenkins のホームページで新しいタスクを作成し、[フリー スタイル:
プロジェクトのセットアップ] を選択し、ソース コード管理に [ここで Git] を選択して、Gitlab プロジェクトのアドレスを入力し、[資格情報] に Gitlab ユーザー名とパスワードを追加します。
ここでは http メソッドを使用しますが、ssh を使用する場合は、コンテナーの公開キーと秘密キーを設定し、Gitlab アカウントに転送する必要があります。この記事は高速化を目的としているため、この方法については説明しません。
次に、このオプションをチェックしBuild when a change is pushed to Gitlab
、次の URL をコピーします。
上記の URL を Gitlab にコピーし、Webhook をクリックします。
追加後、ここにフックが表示され、「Test」をクリックしてテストできます。
200 が返されると成功を意味するため、ユーザーがコードを送信するたびに、Jenkins は自動デプロイメントを実行するよう積極的に通知されます。
ただし、テストで次の 403 エラーが発生した場合は、
Jenkins でセキュリティ ポリシーを設定し、次のボタンをチェックする必要があります。
最後に、このイベントを受信した後に Jenkins が実行する必要があるものを記述します。ビルドでは、実行シェルを追加しました
。Linux スクリプトを実行するために、必要なものを何でも実行できます。ここでは、Gradle を介してプロジェクトの Jar パッケージをビルドし、次に Dockerfile をビルドして、Jar パッケージを Docker イメージに配置して起動します。
gradle bootJar
docker rm -f app_docker
sleep 1
docker rmi -f app_docker:1.0
sleep 1
docker build -t app_docker:1.0 -f ./docker/Dockerfile .
sleep 1
docker run -d -p 5001:8080 --name app_docker app_docker:1.0
コンソールでは、具体的な実行情報が確認できますが、Linux でコマンドを入力するのと同じで、問題が発生した場合は、それを解決するだけです。できると思いますよ。
ここで成功すると、サーバーのポート 5001 に直接アクセスして、作成したコントローラーの内容を確認できるようになります。コンテンツを Test123 に直接変更し、数秒待ってから更新して結果を確認します。
3.Vueプロジェクト
バックグラウンドは実際にはフロントエンドと似ており、バックグラウンドに Gradle を使用し、フロントエンドに NodeJS を使用することに他なりません。簡単な方法は、Spring プロジェクトと同様にシェルを直接実行し、dist
フォルダー mv をサーバー ホストの Nginx ディレクトリに配置することです。ここではより複雑な方法を使用し、それを Docker に組み込み、Docker を通じてフロントエンドのアドレスを公開します。
まず、フロントエンド プロジェクトのルート ディレクトリに docker フォルダーと Dockerfile を作成しましょう。
# build stage
FROM node:lts-alpine as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# production stage
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
フロントエンド Gitlab~ の Jenkins のフロントエンド プロジェクトとバックグラウンド Spring プロジェクトを使用して WebHook を作成することを忘れないでください。シェルの実行のみが異なります。
docker rm -f glmx-fornt
sleep 1
docker rmi -f glmx-fornt:1.0
sleep 1
docker build -t glmx-fornt:1.0 -f ./docker/Dockerfile .
sleep 1
docker run -d -p 5003:8080 --name glmx-fornt glmx-fornt:1.0
コードをアップロードした後、構築が成功するまで待機して、サーバーのポート 5003 にアクセスしてフロントエンドのコンテンツを確認します。
要約する
以上がJenkinsの簡単な使い方でしたので、少しでもお役に立てれば幸いです。ご質問がございましたら、コメント欄でお問い合わせください。