私は、1から展開を自動化された方法を確認するためのコードのジェンキンス継続的インテグレーション
背景
最近、仕事のための統合持続ジェンキンスを習得する必要があります。勤勉とハンサムな私にとっては。彼はShoudaoqinlai学習ではありません。テスト環境 - - ポイントのライン環境会社はなど、ほとんど使用gitlab、ジェンキンス、上記のコードの展開における中小新興企業である、明確な生産環境がありません。一部だけが書かれたコード - オープンサービス - ログインサービスは、サービス、アップロードのコードをシャットダウンします。それは多くの問題を来る傾向にあるが、また、プログラマに面倒な作業の多くをもたらすでしょう。彼らは、コードを展開するgitlab +ジェンキンスを採用したいので、これは、会社の再編の中に、明確なプロセスを必要とし、ない、とプログラマの負担を軽減するためです。
需要
プログラマによってgitlabにコードを提出し、ジェンキンスさんは、自動配信のトリガーをトリガー;テストサーバーにデプロイ、通常の場合、正式にオンライン環境に提出
環境の紹介
Ubuntu18.04:
网络:内网环境 服务:gitlab环境
Ubuntu16.04:
网络:内网环境 服务:jenkins
CentOSの7:
网路:公网环境 服务:php+nginx+mysql
環境をテストするためのパブリックネットワーク環境は、オンライン環境が存在しない、環境には、プライマーことができ、ラインが正常に同じように真実をテストしました。
展開プロセス
なぜそれを自動化するために1から展開?私は、展開プロセスのインストールを書きたくないので。このプロセスは、何のピットと難しい非常に単純ではありません。Baiduは、少し、たくさん。
前提条件:
1、あなたはもちろん、使用する他の誰かのは、プロジェクトが、後ろにいくつかの権限情報を設定し、それが他の人に面倒であってもよいし、自分のアカウントとgitlab独自のプロジェクトを持っている必要があります。彼のように、最も便利です。
2、公開サーバーは、パブリックネットワークサーバプルgitlabコードを使用して、エラーを低減するためにあるため、ネットワークgitlabプロジェクトにアクセスできる必要があります。具体的に、我々は戻って話しました。
3、恐れていないハード心、そしてハンサムな顔を持っています。
まず、該当するプラグインをインストール
システム管理]をクリックします - 管理プラグインは、あなたが挿入する検索ボックスをダウンロードすることができます。これは単に時間の初期化手順のジェンキンスさんにも、プラグインがインストール、機器に負担をかけ、インストールしようとしています。自分のニーズによると、ハ!
第二に、ジェンキンス上のジョブを作成
1、新しいタスク
を決定するために-選択- -選択ライン2は、タスク名を入力して
これらのプロジェクトの利点と欠点の簡単な概要を
フリースタイル仕事は
設定ページで設定項目やパラメータ完了するために、モジュールを追加する必要が
唯一の機能を実現することができ、各ジョブの
コード化することはできませんが、移行およびバージョン管理を助長されていませんパイプラインは、プロジェクト
のすべてのパラメータは、パイプラインのスクリプトとして具体化することができる
のワーキングセット構築するために、複数段のパイプライン定義することができ
、構成コード技術、簡単なバージョン管理と設定の移行ジョブ
ジェンキンスプロジェクト内で記述されたスクリプトを多分岐パイプライン
ラインの利点
にGitLabプロジェクトで記述されたスクリプト(Jenkinsfile)
多分岐ラインについては、それがhttps://blog.51cto.com/12639039/2352222ブログをお勧めします
3、ジョブ構成インターフェイスに-ビルドトリガにクリックし
構成されていない一般的な必要性
、プログラマのニーズとしてはgitlab、ジェンキンストリガーに新しいコードを提出します。トリガを構築するときに、次のオプションを選択してください
このGitlabは、URLをウェブフック無視しないでください:。このウェブフックのジェンキンスは、自動ビルドをトリガするために使用されます。
[詳細設定]をクリックし、秘密のトークンを作成
4、ウェブフックgitlab 3添加工程上の
ウェブフックのURLを記入する;ステップ3ランダムに生成された文字列でシークレットトークンの塗りを。完了して、[追加]をクリックします。
在这里可以进行测试连通性。
注意到这里的时候,你可能会遇到一个问题:有些用户添加的时候会报这样一个错误,
说是不允许本地网络请求。这是由于新版本安全性的问题造成的,非常容易解决!
解决方法:使用gitlab管理员账户登陆。
将那两个全部勾选。然后回去重新添加即可。
5、编写pipeline脚本
这里有两个选择,第一个是在这里直接写入脚本(温馨提示,脚本在自己电脑上的编辑器上写好粘贴到这里,因为这里的编辑器像吃了翔一样难用!太难了。。。)第二个是使用jenkinsfile文件。我使用了第一个(因为演示操作简单,易懂!嘿嘿)。
写完后点击保存。即可完成一个job的创建
你以为这就完了。最重要的才刚刚开始!!!!!!!!!!!!!!!!!!!!!!!!!!!
三、pipeline script编写
让我们再来回顾一下需求:
程序员通过提交代码到gitlab上;出发jenkins自动部署触发器;部署到测试服务器,如果正常,提交到正式线上环境。不过,我觉得这个没有任何挑战性。我想自己加点难度,不管部署过程是否成功,都要有个钉钉消息发到程序员小哥哥的群里,给他们个警示!
话不多说,上代码一点点解释:
温馨提示:这是我为了满足自身需要而编写的代码,请不要照搬,当然与我有同样需求的随意喽。同时中间的解释也根据我的代码去解释,没有刻意去讲解语法,请谅解!
pipeline{
agent any
stages{
stage("拉去代码"){
steps {
echo "STEP 1 :clone code"
}
}
stage("打包代码"){
steps {
echo "step 2 : code package"
sh label: '', script: '/usr/bin/ssh -p 62322 root@*.*.*.* "cd /var/www/html/pipeline/mytest && git pull && chmod -R 777 /var/www/html/pipeline/mytest/storage && composer install"'
}
}
stage("上线发布"){
steps {
echo "step 3 :deploy package"
}
}
}
post {
success {
dingTalk accessToken:'钉钉机器人的token',
imageUrl:'图片的url',
jenkinsUrl:'http://192.168.5.194:8080/',
message:'pipeline-test代码部署成功。',
notifyPeople:''
}
failure {
dingTalk accessToken:'钉钉机器人的token',
imageUrl:'图片的url',
jenkinsUrl:'http://192.168.5.194:8080/',
message:'pipeline-test代码部署失败'。,
notifyPeople:''
}
}
}
详解:
agent
指示 Jenkins 为整个流水线分配一个执行器(在 Jenkins 环境中的任何可用代理/节点上)和工作区。
echo
写一个简单的字符串到控制台输出。注意这里不是shell命令行的echo或php语法。和他们作用相同而已。
stage
定义了在整个流水线的执行任务的概念性地不同的的子集(比如 "Build", "Test" 和 "Deploy" 阶段), 它被许多插件用于可视化 或Jenkins流水线目前的 状态/进展.
可能这句话不太形象(我第一次看官文也是蒙蔽),来张图
其中最后一个是post处理的状态。
在打包代码的stage块中
sh label: '', script: '/usr/bin/ssh root@*.*.*.* "cd /var/www/html/pipeline/mytest && git pull && chmod -R 777 /var/www/html/pipeline/mytest/storage && composer install"'
这是通过jenkins的片段生成器生成的符合语法的命令,可以在shell中去执行的命令
那么,如何使用jenkins片段生成器?
(1)、点击流水线语法
(2)、从实例步骤中选择sh:shell script。在文本框输入需要生成的shell命令,
(3)、点击生成流水线脚本 按钮即可成成相应的流水线语法
Post
类似于python中try语句。如何根据stage执行的结果而进行特定处理则是实际Pipeline使用中经常会碰到的问题。所以这里post就是来做对异常处理的功能。同时,你也可以理解为自由风格中的构建后的操作步骤(在自由风格中发钉钉可以下载dingding的插件)。而这个post块,就是我要满足自己加的钉钉反馈的需求。说到这里为了让大家更明白post的使用方法想再多解释一下:
使用限制:
需要写在pipeline或者stage块中
注意:post块的位置一定要遵循这个原则,否则不会执行。
支持的条件预置:
always: 无论pipeline或者stage的执行结果如何,此块中的预置操作都会执行。
changed:只有当pipeline或者stage的执行后,当前状态与之前发生了改变时,此块中的预置操作才会执行。
fixed:前一次运行为不稳定状态或者失败状态,而且本次运行成功结束,这两个条件同时满足时,此块中的预置操作才会执行。
regression: 本次运行状态为不稳定状态,失败状态或者是中止状态,而且前一次运行成功结束,这两个条件同时满足时,此块中的预置操作才会执行。
aborted:当前pipeline或者stage的状态为aborted时,此块中的预置操作才会执行。通常是由于流水线被手工中会导致此状态产生,而产生此状态后,通常在Jenkins的UI界面会显示为灰色。
failure:当前pipeline或者stage的状态为failed时,此块中的预置操作才会执行。而产生此状态后,通常在Jenkins的UI界面会显示为红色。
success:当前pipeline或者stage的状态为success时,此块中的预置操作才会执行。而产生此状态后,通常在Jenkins的UI界面会显示为绿色。
unstable: 当前pipeline或者stage的状态为unstable时,此块中的预置操作才会执行。通常情况下测试失败或者代码规约的违反都会导致此状态产生,而产生此状态后,通常在Jenkins的UI界面会显示为黄色。
unsuccessful:当前pipeline或者stage的状态不是success时,此块中的预置操作才会执行。
cleanup:无论pipeline或者stage的状态为何种状态,在post中的其他的条件预置操作执行之后,此块中的预置操作就会执行。
我用到了两个,分别是success和failure,在成功时应该做什么操作,在失败时应该做什么操作。
dingTalkaccessToken:'钉钉机器人的token', 如果不知道如何添加钉钉机器人,去隔壁百度即可
imageUrl:'在发送的信息里会附加这个图片',
jenkinsUrl:'自己jenkins的访问地址', 发送的信息就是这个链接,可以直接跳转到我们的jenkins
message:'发送的文本信息、提示信息',
notifyPeople:'需要通知的人'
私はまた、スクリプト、完成したプレゼンテーションの状況についてはこちらです。あなたはより詳細なジェンキンス文法、推奨学習アドレスしたい場合
https://jenkins.io/zh/doc/book/pipeline/中国語、非常に詳細を。私はパートナーが参照できる類似のニーズに合わせて、ちょうど私の個人的なニーズを満たすためにスクリプトを記述するためにここにいます!
もう一つのリマインダー:初心者は可能な限り標準化され、優れたコードブロックを書き込むことに注意を払う、とても簡単なトラブルシューティングのいくつかの種類必要があります。最も可能性が高いため、コードの中括弧のブロックのGroovyの構文は半日を見つけることができるようになります。だから、仕様にしてみてください。よりよいのためのGroovyの構文の強調表示エディタがある場合。
第四に、ジョブのテスト動作
のすぐクリック建物
完成したら、コンソール出力を通じてプロセス全体を見ることができます
ネイルニュース
これはあなたの弟のプログラマはそれをしようとするコードをプッシュしてみましょう、行われます!