±à¼ÍƼö: |
±¾ÆªÎÄÕÂÖ÷ÒªÃèÊö Jenkins »ù´¡Ó÷¨ £¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚInfoQ£¬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼ÍƼö¡£ |
|
ǰÑÔ£º¸ÃÎÄÕ£¬Î§ÈƳÖÐø¼¯³É£ºJenkins+Docker+K8S Ïà¹Ø×é¼þ£¬ÊµÏÖ×Ô¶¯»¯¹ÜÀíÔ´Âë±àÒë¡¢´ò°ü¡¢¾µÏñ¹¹½¨¡¢²¿ÊðµÈ²Ù×÷£»
Ò»¡¢Jenkins °²×°
1¡¢»·¾³²¿Êð
ÏÂÔØ Jenkins °ü
java -jar jenkins.war --httpPort=8090 |
×¢ÒâÕâÀïÖ±½ÓÏÂÔØ war Îļþ£¬ÒÔ Java ·þÎñµÄÐÎʽÆô¶¯¡£
- »·¾³£ºwar ÔËÐÐ
- °æ±¾£º2.289.3
- ÀàÐÍ£ºGeneric Java package (.war)
Æô¶¯ÃüÁî
java -jar jenkins.war --httpPort=8090 |
Æô¶¯ÈÕÖ¾
Jenkins is fully up and running |
·ÃÎʱ¾µØ¶Ë¿Ú£º8090
¸ÃÒ³Ãæ»áÌáʾ³õʼµÇ¼ÃÜÂëµÄλÖ㬲鿴¸ÃÎļþÖгõʼÃÜÂ룬²¢Íê³ÉµÇ¼¡£
/.jenkins/secrets/initialAdminPassword |
°²×°ÍƼö²å¼þ
µÇ¼֮ºóÏȰÑÍÆ¼öµÄ²å¼þ×°ÉÏ¡£
´´½¨Óû§
²å¼þ°²×°Íê³ÉÖ®ºó»áÌáʾ´´½¨Óû§¡£
ÕâÑù³õʼ»¯Íê³É¡£
ÖØÐÂÆô¶¯£ºrestart
2¡¢ÅäÖÃÓë²å¼þ
»ù´¡ÅäÖÃ
´ò¿ª£º Manage-Jenkins Ñ¡ÏÅäÖà Global-Tool-Configuration Ñ¡Ï
- ²é¿´JDK°²×°Ä¿Â¼
/usr/libexec/java_home -V
- ²é¿´Git°²×°Ä¿Â¼
which git
- ²é¿´Maven°²×°Ä¿Â¼
mvn -v |
ÅäÖÃ×é¼þ£ºJDK¡¢Git¡¢Maven£¬²ÉÓÿª·¢»·¾³µÄ×é¼þ°æ±¾£»
²å¼þ°²×°
°²×°Èçϲå¼þ£º
1¡¢Maven²å¼þ
Maven Integration plugin
2¡¢Pipeline²å¼þ
Pipeline Utility Steps |
¶þ¡¢±¾µØ Git ´ò°ü
¼ò½é£º»ùÓÚ Jenkins Íê³É±¾µØµÄ Git ²Ö¿âÏîÄ¿´ò°ü£»
1¡¢Ð½¨ Item
- ÈÎÎñÃû³Æ£ºMavLoc£¬´¦Àí±¾µØ maven ¹¤³Ì£»
- ÈÎÎñÀàÐÍ£ºÑ¡Ôñ¹¹½¨ maven ÏîÄ¿£»
2¡¢¹¹½¨¼Ç¼¹ÜÀí
±£³Ö¹¹½¨µÄÌìÊý:3 Ì죬±£³Ö¹¹½¨µÄ×î´ó¸öÊý£º10 ¸ö£»
3¡¢¹¹½¨¹ý³Ì
ǰÖà Pre-Steps ²½Ö裬ÕâÀïÖ´ÐÐÒ»´Î maven °æ±¾²é¿´£º
¹¹½¨ Build ²½Ö裬ÕâÀïÖ±½ÓдÏîÄ¿µÄ pom ·¾¶£¬×¢ÒâÖ´ÐÐµÄ maven ÃüÁ
clean package -Dmaven.test.skip=true |
ºóÖà Post Steps ²½Ö裬עÒâÑ¡Ôñ¹¹½¨³É¹¦ºó²ÅÖ´ÐУ¬×ÔÐкöÂÔÕâÀï shell Óï·¨µÄ²»ÈëÁ÷×éºÏ£º
4¡¢Ö´Ðй¹½¨
ÉÏÊöÅäÖÃÍê³Éºó£¬´ò¿ªÈÎÎñÒ³Ãæ£¬Ö´ÐÐÈçϲÙ×÷£º
- Build Now£ºÖ´ÐÐÉÏÃæµÄ¹¹½¨ÈÎÎñ£»
- ¹¹½¨ #ID£º²é¿´¿ØÖÆÌ¨Êä³öµÄÈÕÖ¾£»
ÕâÑù¾Í¿ÉÒÔͨ¹ý jenkins Íê³É±¾µØÏîÄ¿µÄ´ò°üºÍÆô¶¯ÁË¡£ Èý¡¢API ´¥·¢ÈÎÎñ
1¡¢Óû§ÁîÅÆ
¼ò½é£ºÍ¨¹ýÅäÖÃÓû§ API ·ÃÎ浀 token ÁîÅÆ£¬ÍÑÀë jenkins ¿ØÖÆÌ¨£¬Ö±½Ó´¥·¢¹¹½¨ÈÎÎñ£»
½øÈëÓû§Ãæ°åµÄÉèÖÃÑ¡ÏÅäÖà API Token :
×¢ÒâÕâÀïÉú³ÉÁîÅÆºóÒªÁ¢¿Ì¸´ÖÆÏÂÀ´£¬Ò³Ãæ»áÌáʾ token ÎÞ·¨¸´ÏÖ¡£
2¡¢ÈÎÎñÁîÅÆ
ÈÎÎñÅäÖõĹ¹½¨´¥·¢Æ÷Ä£¿é£¬ÉèÖÃÔ¶³Ì¹¹½¨µÄÁîÅÆ£º
ÉÏÃæÒѾ¸øµ½ token µÄʹÓ÷½Ê½¡£
3¡¢½Å±¾´¥·¢
ͨ¹ýÈçÏ·½Ê½£¬Ö±½Ó´¥·¢ÉÏÊö¹¹½¨ÈÎÎñµÄÁ÷³Ì£º
curl http://Óû§:ÁîÅÆ@Jenkins_Url/job / MavLoc / build?token=ÈÎÎñÁîÅÆ |
ÕâÀïͨ¹ý½Å±¾Ö±½ÓÇëÇó URL µÄ·½Ê½´¥·¢Á÷³Ì¡£ ËÄ¡¢´ò°ü Git ÏîÄ¿
1¡¢ÅäÖòֿâ
´´½¨ MavGit ÈÎÎñ£¬ÕâÀï²»×ö¹ý¶àµÄÅäÖã¬Óë±¾µØ²Ö¿âÏà±È£¬Ö»ÊÇ°Ñ²Ö¿âµØÖ·»»³É Gitee µØÖ·£¬Ö»ÅäÖòֿâ url ºÍ·ÖÖ§¼´¿É£¬ÆäËû²ÉÓÃĬÈÏ£º
ÒòΪÊÇ¿ª·ÅµÄ²Ö¿âµØÖ·£¬ËùÒÔ²»ÓÃÅäÖÃÕ˺ÅÃÜÂ룬ĬÈÏÖ¸¶¨ master ·ÖÖ§£¬È»ºóÖ´ÐÐ build ¹¹½¨¡£
2¡¢²é¿´¿Õ¼ä
ÉÏÃæÁ÷³ÌÖ´ÐÐÍêºó£¬²é¿´ MavGit µÄ¹¤×÷¿Õ¼ä£º /.jenkins/workspace/MavGit £º
ÕâÀï¿ÉÒÔÃ÷ÏÔ·¢ÏÖ£¬²Ö¿âµÄ´úÂëÒѾ±» pull ÏÂÀ´£¬²¢ÇÒÍê³ÉÁË×Ô¶¯´ò°üÁ÷³Ì£¬ºóÐø½áºÏ shell ½Å±¾Íê³É jar Æô¶¯¹ÜÀí¼´¿É¡£ Îå¡¢Webhook ÔÀí
Pipeline Á÷Ë®ÏßÈÎÎñͨ³£Çé¿ö϶¼ÊÇ×Ô¶¯´¥·¢µÄ£¬ÔÚ Git ²Ö¿âÖÐÅäÖÃÔ´Âë¸Ä¶¯ºó֪ͨµÄµØÖ·¼´¿É¡£
ÀýÈçÔÚ Gitee ²Ö¿âÖУ¬»ùÓÚ WebHook µÄÅäÖ㬿ÉÒÔÔÚÏò²Ö¿â push ´úÂëºó£¬×Ô¶¯»Øµ÷Ô¤ÏÈÉ趨µÄÇëÇóµØÖ·£¬´Ó¶ø´¥·¢´úÂë¸üкóµÄ´ò°ü¶¯×÷£¬»ù±¾Á÷³ÌÈçÏ£º
ÕâÀïÉæ¼°µ½Á½¸öºËÐÄÅäÖãº
- Gitee »Øµ÷£º¼´²Ö¿â½ÓÊÕµ½ push ÇëÇóºóµÄ֪ͨµØÖ·£»ÔÚ²Ö¿â¹ÜÀíµÄ WebHooks Ñ¡ÏîÖУ»
- Jenkins Á÷³Ì£º±àдÁ÷Ë®ÏßÈÎÎñ£¬´¦Àí´úÂëÌá½»ºóµÄ×Ô¶¯»¯Á÷³Ì£»ÕâÀïÐèÒª Jenkins µØÖ·¿ÉÒÔÔÚÍâÍø·ÃÎÊ£¬ÍøÉϵÄ×é¼þºÜ¶à£¬×ÔÐÐÑ¡Ôñ´î½¨¼´¿É£»
×¢Òâ £º¿ÉÒÔÏÈËæÒâÉèÖûص÷µØÖ·£¬ÔÚÇëÇóÈÕÖ¾ÖÐÖ±½Ó¿½±´ÇëÇó²ÎÊý£¬ÔÚ postman ÖÐÈ¥´¥·¢ Jenkins ÈÎÎñ£¬ÕâÑùÔÚ²âÊÔʱ»á·½±ãºÜ¶à¡£
ÕâÀï½áºÏ Gitee µÄ°ïÖúÎĵµ£¬È¥·ÖÎö²»Í¬ push ¶¯×÷µÄ²ÎÊý±êʶ£¬¿ÉÒÔÅжϷÖÖ§µÄ´´½¨¡¢ÍÆËÍ¡¢É¾³ýµÈ²Ù×÷£¬ÀýÈ磺
"after": "1c50471k92owjuh37dsadfs76ae06b79b6b66c57",
"before": "0000000000000000000000000000000000000000", |
´´½¨·ÖÖ§£ºbefore ×Ö·û¶¼ÊÇ 0£»É¾³ý·ÖÖ§£ºafter ×Ö·û¶¼ÊÇ 0£» Áù¡¢Á÷Ë®ÏßÅäÖÃ
1¡¢²å¼þ°²×°
ÔÚ Jenkins ²å¼þ¹ÜÀíÖУ¬°²×° Generic-Webhook-Trigger ²å¼þ£¬Á÷Ë®Ïß pipeline Ïà¹Ø×é¼þÔÚ Jenkins ³õʼ»¯µÄʱºòÒѾ°²×°ÁË¡£
2¡¢´´½¨Á÷Ë®Ïß
н¨ Item£¬ÊäÈëÈÎÎñÃû³Æ£¬Ñ¡Ôñ pipeline Ñ¡Ïî¼´¿É£º
Ñ¡Ôñ Webhook Ñ¡Ïî£¬Ò³ÃæÌáʾÁË´¥·¢µÄ·½Ê½¡£
3¡¢´¥·¢Á÷Ë®Ïß
http://Óû§Ãû:ÃÜÂë@JENKINS_URL/ generic-webhook -trigger / invoke |
»ùÓÚÈçÉÏ·½Ê½Í¨¹ýÈÏÖ¤£¬´¥·¢Á÷Ë®ÏßÖ´ÐУ¬»áÉú³ÉÈÎÎñÈÕÖ¾£¬¼´Á÷³ÌÊÇͨ˳µÄ¡£ Æß¡¢Pipeline Óï·¨
1¡¢½á¹¹Óï·¨
- triggers£º»ùÓÚ hook ģʽ´¥·¢Á÷Ë®ÏßÈÎÎñ£»
- environment£ºÉùÃ÷È«¾ÖͨÓõĻ·¾³±äÁ¿£»
- stages£º¶¨ÒåÈÎÎñ²½Ö裬¼´Á÷³Ì·Ö¶Î´¦Àí£»
- post.always£º×îÖÕÖ´Ðе͝×÷£»
³£¹æÁ÷³ÌÖеÄÕûÌå½á¹¹ÈçÏ£º
pipeline {
agent any
triggers {}
environment {}
stages {}
post { always {}}
} |
°Ñ¸÷¸ö½ÚµãϵĽű¾ÅäÖýøÈ¥£¬¾Í»áÉú³ÉÒ»¸ö×Ô¶¯»¯µÄÁ÷Ë®ÏßÈÎÎñ¡£×¢ÒâÕâÀï ²»¹´Ñ¡ ʹÓÃGroovyɳºÐ Ñ¡Ïî¡£
2¡¢²ÎÊý½âÎö
ÕâÀï˵µÄ²ÎÊý½âÎöÊÇÖ¸£¬Gitee ͨ¹ý hook »úÖÆÇëÇó Jenkins ·þÎñЯ´øµÄ²ÎÊý£¬ÕâÀïÖ÷Òª½âÎö post ²ÎÊý¼´¿É£¬½âÎö·½Ê½¿´ËµÃ÷£º
ÕâÀï´Ó hook »Øµ÷µÄ²ÎÊýÖÐÑ¡Á˼¸¸öÁ÷³ÌÖÐʹÓõIJÎÊý£¬ÏÂÃæ¿´¾ßÌå½âÎö·½Ê½£¬ÔÚÉÏͼÖеã»÷ÐÂÔö£º
{
"ref":"refs/heads/master",
"repository":{
"name":"butte-auto-parent",
"git_http_url":"²Ö¿âµØÖ·-URL"
},
"head_commit":{
"committer":{
"user_name":"Ìá½»ÈËÃû³Æ",
}
},
"before":"277bf91ba85996da6c",
"after":"178d56ae06b79b6b66c"
} |
°ÑÉÏÊö²ÎÊýÒÀ´Î×öºÃÅäÖü´¿É£¬Õâ

ÑùÔÚ¹¤×÷Á÷ÖоͿÉÒÔʹÓÃÕâЩ²ÎÊý¡£
3¡¢´¥·¢Æ÷½Úµã
ÕâÀï¼´ triggers Ä£¿éÅäÖ㬺ËÐÄ×÷ÓÃÊǼÓÔØ´¥·¢Á÷³ÌµÄһЩ²ÎÊý£¬ºóÐøÔڽű¾ÖÐʹÓã¬ÆäËûÏà¹ØÅäÖð´ÐèÑ¡Ôñ¼´¿É£¬×¢ÒâÕâÀïµÄ²ÎÊýÐèÒªÔÚÉϸö²½ÖèÖÐÅäÖãº
triggers {
GenericTrigger(
genericVariables: [
[key: 'ref', value: '$.ref'],
[key: 'repository_name', value: '$.repository.name'] ,
[key: 'repository_git_url', value: '$.repository.git_http_url'] ,
[key: 'committer_name', value: '$.head_commit.committer.user_name'] ,
[key: 'before', value: '$.before'],
[key: 'after', value: '$.after']
],
// causeString: ' Triggered on $ref' ,
// printContributedVariables: true,
// ´òÓ¡ÇëÇó²ÎÊý
// printPostContent: true
)
} |
4¡¢»·¾³±äÁ¿
ÉùÃ÷һЩȫ¾ÖµÄ»·¾³±äÁ¿£¬Ò²¿ÉÒÔÖ±½Ó¶¨Ò壬ÔÚÁ÷³ÌÖÐÓà ${±äÁ¿} µÄ·½Ê½ÒýÓãº
environment {
branch = env.ref.split("/")[2].trim()
is_master_branch = "master".equals(branch)
is_create_branch = env.before.replace('0','').trim().equals("")
is_delete_branch = env.after.replace('0','').trim().equals("")
is_success = false
} |
ÕâÀï¸ù¾Ý hook ÇëÇó²ÎÊý£¬½âÎö³ö·ÖÖ§µÄ²Ù×÷ÀàÐÍ£ºÊÇ·ñ´´½¨¡¢ÊÇ·ñɾ³ý¡¢ÊÇ·ñÖ÷¸É·ÖÖ§£¬ÒÔ¼°¶¨ÒåÒ»¸ö is_success Á÷³ÌÊÇ·ñ³É¹¦µÄ±êʶ¡£
5¡¢·Ö¶ÎÁ÷³Ì
ÕâÀïÖ÷Òª·ÖΪÎå¸ö²½Ö裺½âÎöÊý¾Ý¡¢ÀÈ¡·ÖÖ§¡¢´¦Àí Pom Îļþ¡¢·ÖÖ§ÍÆËÍ¡¢ÏîÄ¿´ò°ü£»
stages {
// ½âÎö²Ö¿âÐÅÏ¢
stage('Parse') {
steps {
echo "²Ö¿â·ÖÖ§ : ${branch} \n²Ö¿âÃû³Æ : ${repository_name} \n²Ö¿âµØÖ· : ${repository_git_url} \nÌá½»Óû§ : ${committer_name}"
script {
if ("true".equals(is_master_branch)) {
echo "±£»¤·ÖÖ§ : ${branch}"
}
if ("true".equals(is_create_branch)) {
echo "´´½¨·ÖÖ§ : ${branch}"
}
if ("true".equals(is_delete_branch)) {
echo "ɾ³ý·ÖÖ§ : ${branch}"
}
}
}
}
// ÀÈ¡²Ö¿â·ÖÖ§
stage('GitPull') {
steps {
script {
if ("false".equals(is_delete_branch)) {
echo "ÀÈ¡·ÖÖ§ : ${branch}"
git branch: "${branch}",url: "${repository_git_url}"
}
}
}
}
// ½âÎö²Ö¿âPomÎļþ
stage('MvnPom') {
steps {
script {
// ½âÎöPomÎļþÄÚÈÝ
def pom = readMavenPom file: 'pom.xml'
def version = "${pom.version}"
def encode = pom.getProperties().get("project.build.sourceEncoding")
echo "Pom°æ±¾ : "+ version
echo "Pom±àÂë : "+ encode
def devVersion = "${branch}-"+version
def jarName = "${branch}-"+version+".jar"
echo "Now°æ±¾ : "+ devVersion
echo "JarÃû³Æ : "+ jarName
// ÐÞ¸ÄPomÎļþÄÚÈÝ
// pom.getProperties().put("dev.version","${devVersion}". trim().toString())
// writeMavenPom file: 'pom.xml', model: pom
echo "update pom success"
}
}
}
// ÍÆËͲֿâ·ÖÖ§
stage('GitPush') {
steps {
script {
echo "git push success"
}
}
}
// ±¾µØ´ò°üÁ÷³Ì
stage('Package') {
steps {
script {
sh 'mvn clean package -Dmaven.test.skip=true'
is_success = true
}
}
}
}
|
- ½âÎöÊý¾Ý£º½âÎö²¢Êä³ö²¿·Ö²ÎÊýÐÅÏ¢£»
- ÀÈ¡·ÖÖ§£º½áºÏ Git ÃüÁÀÈ¡·ÖÖ§´úÂ룻
- ´¦Àí Pom Îļþ£º¶Ô pom ÎļþµÄ¶ÁÈ¡ºÍÐ޸ģ»
- ·ÖÖ§ÍÆËÍ£º½áºÏ Git ÃüÁî£¬ÍÆËÍ·ÖÖ§´úÂ룻
- ÏîÄ¿´ò°ü£º½áºÏ Mvn ÃüÁÍê³ÉÏîÄ¿´ò°ü£»
×¢Òâ £ºÕâÀïÔÚ±¾µØ²âÊÔÁ÷³Ìʱ£¬²¢Ã»ÓÐÍÆËÍ´úÂ룻ÔÚÏîÄ¿´ò°üÍê³Éºó£¬½áºÏ shell ½Å±¾Íê³É·þÎñµÄÆô¶¯·¢²¼¡£
6¡¢ÏûϢ֪ͨ
ÔÚÁ÷³ÌµÄ×îºó£¬Ê¶±ðÈÎÎñµÄÖ´Ðбêʶ is_success £¬Í¨ÖªÏà¹ØÈËÔ±ÊÇ·ñ´ò°ü³É¹¦£¬ÕâÀïµÄ֪ͨ·½Ê½¿ÉÒÔÑ¡ÔñÓʼþ»òÕ߯äËû API ÍÆË͵Ä֪ͨÀàÐÍ£¬²»¹ý¶àÃèÊö£º
post {
always {
script {
echo "notify : ${committer_name} , pipeline is success : ${is_success}"
}
}
} |
7¡¢Ö´ÐÐÈÕÖ¾
Íê³ÉÉÏÃæ pipeline Á÷Ë®Ï߽ű¾¿ª·¢ºó£¬Í¨¹ý postman ¹¤¾ß²»¶Ï·¢ËÍÇëÇó£¬Íê³É½Å±¾µ÷ÊÔ£º
ÕâÀïÒ²¿ÉÒÔµã»÷Á÷³ÌÀïµÄ²»Í¬Ä£¿é£¬²é¿´¸ÃÄ£¿éϵÄÈÕÖ¾ÐÅÏ¢£º
˵Ã÷£ºÍêÕûµÄ pipeline ½Å±¾ÄÚÈÝ·ÅÔÚĩβµÄ Gitee ¿ªÔ´²Ö¿âÖУ¬ÓÐÐèÒªµÄ×ÔÐлñÈ¡¡£ °Ë¡¢Ô´´úÂëµØÖ·
GitEE¡¤µØÖ·
https://gitee.com/cicadasmile/butte-auto-parent
Wiki¡¤µØÖ·
https://gitee.com/cicadasmile/butte-java-note |
|