【CI/CD】Jenkins+Docker+Gitによる簡単なCI処理実践(前編)

Jenkins+Docker+Gitをベースにした簡単なCI処理実践(前編)

今日のインターネット時代では、ソフトウェア開発の複雑さが増し続けているため、ソフトウェア開発とリリース管理の重要性がますます高まっています。現在、一連の標準プロセスが形成されており、その最も重要なコンポーネントは継続的インテグレーション継続的デリバリー、およびデプロイメントです。ここでは、簡単なケースを使用して、JD Cloud 上で CI プロセスを実践します。

1. 関連する概念とツールの紹介

1.1 CI/CD

継続的インテグレーション(CI) は、開発者向けの自動プロセスです。CI が成功すると、アプリケーション コードに対する新しい変更が定期的に構築、テストされ、共有リポジトリにマージされることを意味します。このソリューションは、1 つの開発内にアプリケーション ブランチが多すぎて競合が発生するという問題を解決できます。

継続的デリバリー(CD)。通常、開発者によるアプリケーションへの変更は自動的にエラー テストされ、リポジトリ (GitHub やコンテナ レジストリなど) にアップロードされ、その後運用チームによってライブ運用環境にデプロイされますこれは、開発チームと運用チーム間の可視性とコミュニケーションの悪さに対処することを目的としています。したがって、継続的デリバリーの目的は、新しいコードのデプロイに必要な労力をできるだけ少なくすることです。

継続的デプロイメント(CD) は、別のタイプの「CD」であり、開発者の変更をリポジトリから本番環境に自動的にリリースして、顧客が利用できるようにすることを指します。これは主に、アプリケーションの配信を遅らせる手動プロセスによる運用チームの過負荷の問題に対処することを目的としています。

1.2 ジェンキンス

Jenkinsは、オープン ソース ソフトウェア プロジェクトです。Javaに基づいて開発された継続的統合ツール

1.3 ドッカー

Dockerは、開発者がアプリケーションと依存関係をポータブル コンテナにパッケージ化し、それを一般的な Linux マシンに公開できるオープン ソースのアプリケーション コンテナ エンジンであり、仮想化も実装できます。コンテナーは完全にサンドボックス メカニズムを使用しており、コンテナー間にインターフェイスはありません。

1.4 Git

Git は、小規模から非常に大規模なプロジェクトのバージョン管理を効果的かつ迅速に処理できるコード リポジトリを提供するオープン ソースの分散バージョン管理システムです。Git はLinus Torvalds です Linus\ TorvaldsLin u s T or val ds は、Linuxカーネル開発の 管理を支援するために開発されたオープン ソースのバージョン管理ソフトウェアです

2. 事前準備

2.1 CIプロセス設計図

ここに画像の説明を挿入

2.2 ワークフロー

  • 開発者はコードを Git リポジトリに送信します。
  • Jenkins は手動/タイミングでプロジェクトのビルドをトリガーします。
  • Jenkins はコードをプルし、コードをコンパイルし、イメージをパッケージ化して、ミラー ウェアハウスにプッシュします。
  • Jenkins は Docker ホスト上にコンテナを作成し、公開します。

ここに画像の説明を挿入

2.3 ホスト環境の計画

ホスト名 導入 パブリックネット イントラネット
docker-jenkins プロジェクトの構築: プル コード、コード コンパイル、パッケージ ミラー、ミラー ウェアハウスへのミラーのプッシュ 116.196.85.174 10.0.0.20
docker-git コードリポジトリ 116.196.86.207 10.0.0.22
docker-harbor 私設鏡倉庫 116.196.88.91 10.0.0.21
buildimage Docker イメージをビルドする 116.196.89.139 10.0.0.4

3. ホストの作成

JD Cloud コンソールで 4 つのクラウド ホストを作成します。アドレス: https://console.jdcloud.com/

構成は以下の通りで、購入時に数量を直接選択します4 44.購入が完了したら、名前をそれぞれ変更します:docker-jenkinsdocker-gitdocker-harborbuildimage

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
名前を作成して変更した後、次のようにします。

ここに画像の説明を挿入

4. 環境構築

4.1 クラウド ホスト docker-git

(1) ホスト名を次のように変更します。docker-git

[root@112 ~]# hostnamectl set-hostname docker-git
[root@112 ~]# hostname  docker-git
[root@112 ~]# logout
[root@docker-git ~]#

Ctrl+D有効にするには、ログアウト後に再ログインしてください。

(2) Gitコードバージョンウェアハウスのデプロイ

インストール:

[root@docker-git ~]# yum install git -y

ユーザーを設定しますgit:

[root@docker-git ~]# useradd git
[root@docker-git ~]# passwd git

ここに画像の説明を挿入

ライブラリを作成します。

[root@docker-git ~]# su git
[git@docker-git root]$ cd
[git@docker-git ~]$ mkdir tomcat-java-demo.git
[git@docker-git ~]$ cd tomcat-java-demo.git/
[git@docker-git tomcat-java-demo.git]$ git --bare init
Initialized empty Git repository in /home/git/tomcat-java-demo.git/
[git@docker-git tomcat-java-demo.git]$ ls
branches  config  description  HEAD  hooks  info  objects  refs
[git@docker-git tomcat-java-demo.git]$ 

ここに画像の説明を挿入

4.2 クラウド ホスト docker-jenkins

(1) ホスト名を次のように変更します。docker-jenkins

[root@113 ~]# hostnamectl set-hostname docker-jenkins
[root@113 ~]# hostname  docker-jenkins
[root@113 ~]# logout
[root@docker-jenkins ~]#

Ctrl+D有効にするには、ログアウト後に再ログインしてください。

(2) Jenkins環境の導入

導入jdk環境とmaven:

[root@docker-jenkins tomcat-java-demo]# cd
[root@docker-jenkins ~]# mkdir tools
[root@docker-jenkins ~]# cd tools
[root@docker-jenkins tools]# wget https://pocenv-hcc.oss.cn-north-1.jcloudcs.com/jdk-8u191-linux-x64.tar.gz;tar zxf jdk-8u191-linux-x64.tar.gz;mv jdk1.8.0_191/ /usr/local/;ln -s /usr/local/jdk1.8.0_191/ /usr/local/jdk;
[root@docker-jenkins tools]# vim /etc/profile
######## JDK #######
JAVA_HOME=/usr/local/jdk1.8.0_191
JAVA_BIN=/usr/local/jdk1.8.0_191/bin
PATH=$PATH:$JAVA_BIN
CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
[root@docker-jenkins tools]# source /etc/profile
[root@docker-jenkins tools]# java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode) 
[root@docker-jenkins tools]# wget https://pocenv-hcc.oss.cn-north-1.jcloudcs.com/apache-maven-3.5.0-bin.tar.gz;tar zxf apache-maven-3.5.0-bin.tar.gz;mv apache-maven-3.5.0 /usr/local/maven
[root@docker-jenkins tools]# 

をインストールしJenkinsTomcatバイナリ パッケージをダウンロードして、warパッケージを に移動しますwebapps

[root@docker-jenkins tools]# wget https://pocenv-hcc.oss.cn-north-1.jcloudcs.com/jenkins.war
[root@docker-jenkins tools]# wget https://pocenv-hcc.oss.cn-north-1.jcloudcs.com/apache-tomcat-8.5.38.tar.gz
[root@docker-jenkins tools]# tar zxf apache-tomcat-8.5.38.tar.gz
[root@docker-jenkins tools]# ls
apache-maven-3.5.0-bin.tar.gz  apache-tomcat-8.5.38  apache-tomcat-8.5.38.tar.gz  jdk-8u191-linux-x64.tar.gz  jenkins.war
[root@docker-jenkins tools]# mv apache-tomcat-8.5.38 /usr/local/tomcat-jenkins
[root@docker-jenkins tools]# ls /usr/local/tomcat-jenkins/webapps/
docs  examples  host-manager  manager  ROOT
[root@docker-jenkins tools]# rm -rf /usr/local/tomcat-jenkins/webapps/*
[root@docker-jenkins tools]# mv jenkins.war /usr/local/tomcat-jenkins/webapps/ROOT.war
[root@docker-jenkins tools]# ll /usr/local/tomcat-jenkins/webapps/
total 75520
-rw-r--r--. 1 root root 77330344 Mar 15 00:55 ROOT.war
[root@docker-jenkins tools]# cd /usr/local/tomcat-jenkins/bin/
[root@docker-jenkins bin]# ./startup.sh
Using CATALINA_BASE:   /usr/local/tomcat-jenkins
Using CATALINA_HOME:   /usr/local/tomcat-jenkins
Using CATALINA_TMPDIR: /usr/local/tomcat-jenkins/temp
Using JRE_HOME:        /usr/local/jdk1.8
Using CLASSPATH:       /usr/local/tomcat-jenkins/bin/bootstrap.jar:/usr/local/tomcat-jenkins/bin/tomcat-juli.jar
Tomcat started.
[root@docker-jenkins bin]#

起動後、ブラウザから ( docker-jenkins):にアクセスしhttp://Jenkins主机公网IP:8080/、画面の指示に従ってパスワードを入力してログインします。

ファイル内の/root/.jenkins/secrets/initialAdminPasswordパスワードを確認して入力します。

ここに画像の説明を挿入
必要に応じてプラグインをインストールしてください。

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
管理者を設定します。

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
始めましょうJenkins

ここに画像の説明を挿入
(3) DOCKER CE(Dockerのコミュニティ版)をインストールする

必要なパッケージをインストールします。

yum install -y yum-utils device-mapper-persistent-data lvm2 -y

安定したリポジトリをセットアップします。

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo -y

インストールDOCKER CE(このステップは時間がかかるので、気長に待ちます!):

yum install docker-ce docker-ce-cli containerd.io -y

開始Docker:

systemctl start docker

4.3 クラウドホスト docker-harbor

(1) ホスト名を次のように変更します。docker-harbor

[root@c-dfjgjesgqe ~]# hostnamectl set-hostname docker-harbor
[root@c-dfjgjesgqe ~]# hostname  docker-harbor

Ctrl+D有効にするには、ログアウト後に再ログインしてください。

(2) エンタープライズレベルのHarborミラーウェアハウス展開

Habor は、VMWare によるオープンソースのコンテナ ミラー ウェアハウスです。実際、Habor は Docker Registry に対応するエンタープライズ レベルの拡張機能を作成し、より幅広いアプリケーションを獲得しました。これらの新しいエンタープライズ レベルの機能には、管理ユーザー インターフェイス、ロールベースのアクセス制御、AD/LDAP 統合および監査ログなど含まます。基本的なビジネスニーズを満たします。

Harbor の各コンポーネントの紹介:

コンポーネント 関数
harbor-adminserver 構成管理センター
harbor-db MySQLデータベース
harbor-jobservice ミラーリングを担当する
harbor-log 操作ログを記録する
harbor-ui Web管理ページとAPI
nginx フロントエンド プロキシ。フロントエンド ページとミラーのアップロード/ダウンロード転送を担当します。
redis 会話
registry ミラーストレージ

3 3で設置されたハーバー3つの方法

  • オンライン インストール: Docker Hub から Harbor 関連のイメージをダウンロードするため、インストール パッケージは非常に小さくなります。
  • オフライン インストール: インストール パッケージには展開に関連するイメージが含まれているため、インストール パッケージは比較的大きくなります。
  • OVA インストーラー: ユーザーが vCenter 環境を持っている場合、OVA のデプロイ後にこのインストーラーを使用して Harb を起動します。

ここでは、2 番目のオフライン インストール方法を使用して、httpsアクセス ベースのharborミラー ウェアハウスを構築します。

1) オフライン インストール パッケージをダウンロードして解凍します。

harborオフラインパッケージのダウンロードアドレス: https://github.com/goharbor/harbor/releases

ダウンロードの便宜のために、JD Cloud Object Storage にもコピーを保存しました。これは、次のように直接保存できますwgethttps://pocenv-hcc.oss.cn-north-1.jcloudcs.com/harbor-offline-installer-v1.7.4.tgz

[root@docker-harbor ~]# yum install vim wget openssl -y
[root@docker-harbor ~]# wget https://pocenv-hcc.oss.cn-north-1.jcloudcs.com/harbor-offline-installer-v1.7.4.tgz
[root@docker-harbor ~]# tar zxf harbor-offline-installer-v1.7.4.tgz
[root@docker-harbor ~]# cd harbor
[root@docker-harbor harbor]# ll
total 570744
drwxr-xr-x 3 root root        23 Apr  1 15:05 common
-rw-r--r-- 1 root root       939 Mar  4 15:33 docker-compose.chartmuseum.yml
-rw-r--r-- 1 root root       975 Mar  4 15:33 docker-compose.clair.yml
-rw-r--r-- 1 root root      1434 Mar  4 15:33 docker-compose.notary.yml
-rw-r--r-- 1 root root      5608 Mar  4 15:33 docker-compose.yml
-rw-r--r-- 1 root root      8033 Mar  4 15:33 harbor.cfg
-rw-r--r-- 1 root root 583086399 Mar  4 15:33 harbor.v1.7.4.tar.gz
-rwxr-xr-x 1 root root      5739 Mar  4 15:33 install.sh
-rw-r--r-- 1 root root     11347 Mar  4 15:33 LICENSE
-rw-r--r-- 1 root root   1263409 Mar  4 15:33 open_source_license
-rwxr-xr-x 1 root root     36337 Mar  4 15:33 prepare

2) 自己署名 http 証明書

権威ある認証証明書を取得します。

[root@docker-harbor harbor]# mkdir ssl
[root@docker-harbor harbor]# cd ssl
[root@docker-harbor ssl]# openssl genrsa -out ca.key 4096
Generating RSA private key, 4096 bit long modulus
...................................++
.....................................................................................................................................++
e is 65537 (0x10001)
[root@docker-harbor ssl]# openssl req -x509 -new -nodes -sha512 -days 3650 -subj "/C=ZH/ST=ShangHai/L=ShangHai/O=example/OU=Personal/CN=reg.marin.com" -key ca.key -out ca.crt
[root@docker-harbor ssl]# ll
total 8
-rw-r--r-- 1 root root 2037 Apr  4 18:41 ca.crt
-rw-r--r-- 1 root root 3243 Apr  4 18:41 ca.key

サーバー証明書を取得します。

1.Create your own Private Key:
[root@docker-harbor ssl]# openssl genrsa -out reg.marin.com.key 4096
Generating RSA private key, 4096 bit long modulus
.............................................++
............................................................................................................................................................................................................................++
e is 65537 (0x10001)
[root@docker-harbor ssl]# openssl req -sha512 -new -subj "/C=ZH/ST=ShangHai/L=ShangHai/O=example/OU=Personal/CN=reg.marin.com" -key reg.marin.com.key -out reg.marin.com.csr
[root@docker-harbor ssl]# ll
total 16
-rw-r--r-- 1 root root 2037 Apr  4 18:41 ca.crt
-rw-r--r-- 1 root root 3243 Apr  4 18:41 ca.key
-rw-r--r-- 1 root root 1708 Apr  4 18:42 reg.marin.com.csr
-rw-r--r-- 1 root root 3243 Apr  4 18:42 reg.marin.com.key
[root@docker-harbor ssl]# cat > v3.ext <<-EOF
> authorityKeyIdentifier=keyid,issuer
> basicConstraints=CA:FALSE
> keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
> extendedKeyUsage = serverAuth
> subjectAltName = @alt_names
> 
> [alt_names]
> DNS.1=reg.marin.com
> DNS.2=reg.marin
> DNS.3=marin
> EOF
[root@docker-harbor ssl]# openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in reg.marin.com.csr -out reg.marin.com.crt
Signature ok
subject=/C=ZH/ST=ShangHai/L=ShangHai/O=example/OU=Personal/CN=reg.marin.com
Getting CA Private Key
[root@docker-harbor ssl]# ll
total 28
-rw-r--r-- 1 root root 2037 Apr  4 18:41 ca.crt
-rw-r--r-- 1 root root 3243 Apr  4 18:41 ca.key
-rw-r--r-- 1 root root   17 Apr  4 18:44 ca.srl
-rw-r--r-- 1 root root 2098 Apr  4 18:44 reg.marin.com.crt
-rw-r--r-- 1 root root 1708 Apr  4 18:42 reg.marin.com.csr
-rw-r--r-- 1 root root 3243 Apr  4 18:42 reg.marin.com.key
-rw-r--r-- 1 root root  260 Apr  4 18:43 v3.ext

harbor構成を変更し、およびDockerのサーバー証明書を構成しますkeyCA

[root@docker-harbor ssl]# cd ..
[root@docker-harbor harbor]# vim harbor.cfg
......
hostname = reg.marin.com
ui_url_protocol = https
ssl_cert = ./ssl/reg.marin.com.crt
ssl_cert_key = ./ssl/reg.marin.com.key
harbor_admin_password = 123456
......

パスワードは変更しないこともできます (デフォルトのログイン ユーザー: admin、パスワード: ) Harbor12345

Docker デーモンは、.crtファイルを CA 証明書として解釈し、.certファイルをクライアント証明書として解釈し、最初に.crtファイルを.certファイルに変換します。

[root@docker-harbor harbor]# cd ssl/
[root@docker-harbor ssl]# mkdir -p /etc/docker/certs.d/reg.marin.com
[root@docker-harbor ssl]# openssl x509 -inform PEM -in reg.marin.com.crt -out reg.marin.com.cert
[root@docker-harbor ssl]# cp reg.marin.com.cert reg.marin.com.key ca.crt /etc/docker/certs.d/reg.marin.com/

この自己署名成功!

3) Docker CEをインストールする

必要なパッケージをインストールします。

yum install -y yum-utils device-mapper-persistent-data lvm2 -y

安定したリポジトリをセットアップします。

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo -y

ここに画像の説明を挿入

インストールDOCKER CE(このステップは時間がかかるので、気長に待ちます!):

yum install docker-ce docker-ce-cli containerd.io -y

ここに画像の説明を挿入

開始Docker:

systemctl start docker

ミラーを実行して、hello-world正しくインストールされたことを確認しますDocker CE

docker run hello-world

ここに画像の説明を挿入
4) 初期化とインストールの検証

初期インストール:

[root@docker-harbor ssl]# 
[root@docker-harbor ssl]# cd ..
[root@docker-harbor harbor]# ./prepare
Generated and saved secret to file: /data/secretkey
Generated configuration file: ./common/config/nginx/nginx.conf
Generated configuration file: ./common/config/adminserver/env
Generated configuration file: ./common/config/core/env
Generated configuration file: ./common/config/registry/config.yml
Generated configuration file: ./common/config/db/env
Generated configuration file: ./common/config/jobservice/env
Generated configuration file: ./common/config/jobservice/config.yml
Generated configuration file: ./common/config/log/logrotate.conf
Generated configuration file: ./common/config/registryctl/env
Generated configuration file: ./common/config/core/app.conf
Generated certificate, key file: ./common/config/core/private_key.pem, cert file: ./common/config/registry/root.crt
The configuration files are ready, please use docker-compose to start the service.

install.shスクリプトを実行してharborリポジトリをインストールします。

注:install.shスクリプトを実行する前に、次の 2 つの問題を確認してください。

  • docker-composeインストールするかどうか。install.shインストールしないと実行時に失敗し、「✖ まず自分で docker-compose(1.7.1+) をインストールして、このスクリプトを再度実行する必要があります。」と報告されます。
  • dockerサービスが正常に実行されているかどうか。そうでない場合は、実行時にinstall.sh失敗し、「unix:///var/run/docker.sock で Docker デーモンに接続できません。Docker デーモンは実行されていますか?」というエラーが報告されます。

インストールしますCompose

次のコマンドを実行して、次Docker Composeの現在の安定リリースをダウンロードします。

curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

実行可能権限をバイナリに適用します。

chmod +x /usr/local/bin/docker-compose

install.shスクリプトを実行してharborリポジトリをインストールします。

[root@docker-harbor harbor]# ./install.sh

[Step 0]: checking installation environment ...

Note: docker version: 18.09.4

Note: docker-compose version: 1.24.0

[Step 1]: loading Harbor images ...
bffe2a0fec66: Loading layer [==================================================>]  33.22MB/33.22MB
38e174bed467: Loading layer [==================================================>]  8.964MB/8.964MB
427e4936ae66: Loading layer [==================================================>]  35.77MB/35.77MB
3bfd5214250a: Loading layer [==================================================>]  2.048kB/2.048kB
f30df776629d: Loading layer [==================================================>]  3.072kB/3.072kB
f87afad43f43: Loading layer [==================================================>]   22.8MB/22.8MB
......
953717aa0afc: Loading layer [==================================================>]   22.8MB/22.8MB
Loaded image: goharbor/registry-photon:v2.6.2-v1.7.4


[Step 2]: preparing environment ...
Clearing the configuration file: ./common/config/adminserver/env
Clearing the configuration file: ./common/config/core/env
Clearing the configuration file: ./common/config/core/app.conf
Clearing the configuration file: ./common/config/core/private_key.pem
Clearing the configuration file: ./common/config/db/env
......
Generated certificate, key file: ./common/config/core/private_key.pem, cert file: ./common/config/registry/root.crt
The configuration files are ready, please use docker-compose to start the service.


[Step 3]: checking existing instance of Harbor ...


[Step 4]: starting Harbor ...
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating redis              ... done
Creating registryctl        ... done
Creating harbor-db          ... done
Creating harbor-adminserver ... done
Creating registry           ... done
Creating harbor-core        ... done
Creating harbor-jobservice  ... done
Creating harbor-portal      ... done
Creating nginx              ... done

✔ ----Harbor has been installed and started successfully.----

Now you should be able to visit the admin portal at https://reg.marin.com. 
For more details, please visit https://github.com/goharbor/harbor .

ここに画像の説明を挿入
ブラウザのアクセス確認。

ブラウザ アクセスにはドメイン名の解決が必要なので、ローカルhosts( ) ファイルC:\Windows\System32\drivers\etc\hostsに次を追加します116.196.88.91 reg.marin.com

ここに画像の説明を挿入
にアクセスしhttps://reg.marin.comてログインします。

ここに画像の説明を挿入
ログイン後のインターフェースの基本操作:

  • 新しいプロジェクトを作成しますtest

ここに画像の説明を挿入

  • 新しいユーザーを作成しますmarin

ここに画像の説明を挿入

  • ユーザーをプロジェクト管理者marinとして設定します。test

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/be_racle/article/details/132255791