• Java配置43-配置Jenkins Pipline


    目录

    1.Jenkins环境

    2.创建pipeline项目

    1)创建新的pipeline

    2)添加ssh秘钥到gitlab

    3)配置定时扫描

    4)配置filter by name

    5)配置http连接

    6)新建任务创建

    3.Jenkinsfile模板


    1.Jenkins环境

    首先确保jenkins服务器上的jenkins用户可以使用JDK、git、maven,jenkins安装了Open Blue Ocean插件。

    感谢南哥,文档大部分是他写的,我只是做了排版。

    2.创建pipeline项目

    1)创建新的pipeline

    登录jenkins,进入Open Blue Ocean

    代码库选择git,将gitlab项目的ssh连接地址粘到仓库url中。

    然后下面会生成秘钥,需要将秘钥粘到gitlab中。

    2)添加ssh秘钥到gitlab

    登录gitlab

    选择用户设置中的ssh秘钥,将秘钥添加到右面的秘钥框中,点击增加秘钥即可。

    添加成功ssh秘钥后,点击pipeline创建界面的创建pipeline会生成项目的管道。点击进入项目管道,里面就是项目中的各个分支。

    3)配置定时扫描

    选择管道中的configure选项,进入管道配置。勾选上triggers即可实现隔一段时间扫描gitlab项目代码的各分支是否有变化。有变化就开始执行项目中的JenkinsFile。

    4)配置filter by name

    在项目源中可以add filter by name配置,直接筛选jenkins要管理的分支。

    5)配置http连接

    也可以将git源的地方改为http的连接,这是需要add认证。

    点击Add,选择Username with password,在username和password处填上gitlab的用户和密码即可。

    6)新建任务创建

    选择新建任务,选择pipeline类型即可。和blue ocean的configure的界面相同,只需配置git源路径和扫描定时器即可。详细见上一种方法。

    3.Jenkinsfile模板

    Jenkinsfile是创建在项目的根目录下。

    1. pipeline {
    2. agent any
    3. parameters {//参数
    4. //jar包名
    5. string(name: 'AppName', defaultValue: 'access-antfin-application')
    6. string(name: 'AppHostName', defaultValue: 'access-antfin-application')
    7. string(name: 'PersistName', defaultValue: 'access-persist')
    8. //服务器名称
    9. string(name: 'PersistHostName', defaultValue: 'access-persist')
    10. string(name: 'DidiName', defaultValue: 'access-didi-application')
    11. string(name: 'DidiHostName', defaultValue: 'access-antfin-application')
    12. //应用端口号
    13. string(name: 'Port', defaultValue: '11000')
    14. string(name: 'PersistPort', defaultValue: '11001')
    15. string(name: 'DidiPort', defaultValue: '11002')
    16. }
    17. stages {
    18. stage('dev构建') { //stage是一个运行块
    19. //判断分支 以dev开头继续,不然跳过
    20. when {
    21. branch 'dev*'
    22. }
    23. steps {
    24. echo env.BRANCH_NAME //输出分支名
    25. sh 'mvn -DskipTests=true clean install -T 5 -P dev' //跳过test,以dev的profile clean install
    26. //sh 'mvn -DskipTests=true clean install -T 5 -P dev,control'
    27. //sh 'mvn -DskipTests=true deploy -T 5 -P dev'
    28. }
    29. }
    30. stage('dev停止服务') {
    31. when {
    32. branch 'dev*'
    33. }
    34. steps {
    35. script {
    36. try{
    37. sh '''echo "开始停止$AppName服务 $(date '+%Y_%m_%d %H:%M:%S')"'''
    38. sh "echo 目标服务器:dev-$AppHostName, 目标应用:$AppName"
    39. sh 'scp ~/shutdown.sh root@dev-$AppHostName:/home/admin/' //copyshutdown脚本到应用服务器的/home/admin
    40. sh 'ssh root@dev-$AppHostName "chmod +x /home/admin/shutdown.sh"' //赋予shutdown脚本执行权限
    41. sh 'ssh root@dev-$AppHostName "chown admin:admin /home/admin/shutdown.sh "' //将shutdown脚本的拥有者改为admin:admin
    42. sh '''ssh root@dev-$AppHostName "su - admin -c 'nohup ./shutdown.sh $AppName &'"''' //以admin用户执行shutdown脚本
    43. }catch (exc) {
    44. echo '停止应用服务异常'
    45. }
    46. sh '''echo "停止$AppName服务结束 $(date '+%Y_%m_%d %H:%M:%S')"'''
    47. try{
    48. sh '''echo "开始停止$PersistName服务 $(date '+%Y_%m_%d %H:%M:%S')"'''
    49. sh "echo 目标服务器:dev-$PersistHostName, 目标应用:$PersistName"
    50. sh 'scp ~/shutdown.sh root@dev-$PersistHostName:/home/admin/'
    51. sh 'ssh root@dev-$PersistHostName "chmod +x /home/admin/shutdown.sh"'
    52. sh 'ssh root@dev-$PersistHostName "chown admin:admin /home/admin/shutdown.sh "'
    53. sh '''ssh root@dev-$PersistHostName "su - admin -c 'nohup ./shutdown.sh $PersistName &'"'''
    54. }catch (exc) {
    55. echo '停止应用服务异常'
    56. }
    57. sh '''echo "停止$PersistName服务结束 $(date '+%Y_%m_%d %H:%M:%S')"'''
    58. try{
    59. sh '''echo "开始停止$DidiName服务 $(date '+%Y_%m_%d %H:%M:%S')"'''
    60. sh "echo 目标服务器:dev-$DidiHostName, 目标应用:$DidiName"
    61. sh 'scp ~/shutdown.sh root@dev-$DidiHostName:/home/admin/'
    62. sh 'ssh root@dev-$DidiHostName "chmod +x /home/admin/shutdown.sh"'
    63. sh 'ssh root@dev-$DidiHostName "chown admin:admin /home/admin/shutdown.sh "'
    64. sh '''ssh root@dev-$DidiHostName "su - admin -c 'nohup ./shutdown.sh $DidiName &'"'''
    65. }catch (exc) {
    66. echo '停止应用服务异常'
    67. }
    68. sh '''echo "停止$DidiName服务结束 $(date '+%Y_%m_%d %H:%M:%S')"'''
    69. }
    70. }
    71. }
    72. stage('dev部署') {
    73. when {
    74. branch 'dev*'
    75. }
    76. steps {
    77. sh 'scp $AppName/target/$AppName.jar root@dev-$AppHostName:/home/admin/' //将jenkins编译生成的jar包远程拷贝到对应的应用服务器的/home/admin目录下
    78. sh 'ssh root@dev-$AppHostName "chown admin:admin /home/admin/*.jar "' //将jar包的拥有者改为admin:admin
    79. sh 'scp $PersistName/target/$PersistName.jar root@dev-$PersistHostName:/home/admin/'
    80. sh 'ssh root@dev-$PersistHostName "chown admin:admin /home/admin/*.jar "'
    81. sh 'scp $DidiName/target/$DidiName.jar root@dev-$DidiHostName:/home/admin/'
    82. sh 'ssh root@dev-$DidiHostName "chown admin:admin /home/admin/*.jar "'
    83. }
    84. }
    85. stage('dev启动服务') {
    86. when {
    87. branch 'dev*'
    88. }
    89. steps {
    90. sh '''ssh root@dev-$AppHostName "su - admin -c 'nohup java -jar $AppName.jar >> ./logs/$AppName.log &' "''' //后台启动jar包,并将日志输出到log中,不输出控制台日志可写为 >> /dev/null
    91. sh '''ssh root@dev-$PersistHostName "su - admin -c 'nohup java -jar $PersistName.jar >> ./logs/$PersistName.log &' "'''
    92. sh '''ssh root@dev-$DidiHostName "su - admin -c 'nohup java -jar $DidiName.jar >> ./logs/$DidiName.log &' "'''
    93. sh 'sleep 130' //启动等待时间
    94. sh '''echo 结束 date "+%Y_%m_%d %H:%M:%S" '''
    95. }
    96. }
    97. stage('dev健康检查') {
    98. when {
    99. branch 'dev*'
    100. }
    101. steps {
    102. sh ' curl -X GET http://dev-$AppHostName:$Port/health ' //健康检查,访问服务器应用端口的 /health请求。又返回内容即检查成功
    103. sh ' curl -X GET http://dev-$PersistName:$PersistPort/health '
    104. sh ' curl -X GET http://dev-$DidiHostName:$PersistPort/health '
    105. }
    106. }
    107. stage('test构建') {
    108. when {
    109. branch 'test*'
    110. }
    111. steps {
    112. echo env.BRANCH_NAME
    113. sh 'mvn -DskipTests=true clean install -T 5 -P test'
    114. //sh 'mvn -DskipTests=true clean install -T 5 -P test,control'
    115. sh 'cp $AppName/target/$AppName.jar ~/test/test-$AppName.jar'
    116. sh 'cp $PersistName/target/$PersistName.jar ~/test/test-$PersistName.jar'
    117. sh 'cp $DidiName/target/$DidiName.jar ~/test/test-$DidiName.jar'
    118. }
    119. }
    120. stage('test停止服务') {
    121. when {
    122. branch 'test*'
    123. }
    124. steps {
    125. script {
    126. try{
    127. sh '''echo "开始停止$AppName服务 $(date '+%Y_%m_%d %H:%M:%S')"'''
    128. sh "echo 目标服务器:test-$AppHostName, 目标应用:$AppName"
    129. sh 'scp ~/shutdown.sh root@test-$AppHostName:/home/admin/'
    130. sh 'ssh root@test-$AppHostName "chmod +x /home/admin/shutdown.sh"'
    131. sh 'ssh root@test-$AppHostName "chown admin:admin /home/admin/shutdown.sh "'
    132. sh '''ssh root@test-$AppHostName "su - admin -c 'nohup ./shutdown.sh $AppName &'"'''
    133. }catch (exc) {
    134. echo '停止应用服务异常'
    135. }
    136. sh '''echo "停止$AppName服务结束 $(date '+%Y_%m_%d %H:%M:%S')"'''
    137. try{
    138. sh '''echo "开始停止$PersistName服务 $(date '+%Y_%m_%d %H:%M:%S')"'''
    139. sh "echo 目标服务器:test-$PersistHostName, 目标应用:$PersistName"
    140. sh 'scp ~/shutdown.sh root@test-$PersistHostName:/home/admin/'
    141. sh 'ssh root@test-$PersistHostName "chmod +x /home/admin/shutdown.sh"'
    142. sh 'ssh root@test-$PersistHostName "chown admin:admin /home/admin/shutdown.sh "'
    143. sh '''ssh root@test-$PersistHostName "su - admin -c 'nohup ./shutdown.sh $PersistName &'"'''
    144. }catch (exc) {
    145. echo '停止应用服务异常'
    146. }
    147. sh '''echo "停止$PersistName服务结束 $(date '+%Y_%m_%d %H:%M:%S')"'''
    148. try{
    149. sh '''echo "开始停止$DidiName服务 $(date '+%Y_%m_%d %H:%M:%S')"'''
    150. sh "echo 目标服务器:test-$DidiHostName, 目标应用:$DidiName"
    151. sh 'scp ~/shutdown.sh root@test-$DidiHostName:/home/admin/'
    152. sh 'ssh root@test-$DidiHostName "chmod +x /home/admin/shutdown.sh"'
    153. sh 'ssh root@test-$DidiHostName "chown admin:admin /home/admin/shutdown.sh "'
    154. sh '''ssh root@test-$DidiHostName "su - admin -c 'nohup ./shutdown.sh $DidiName &'"'''
    155. }catch (exc) {
    156. echo '停止应用服务异常'
    157. }
    158. sh '''echo "停止$DidiName服务结束 $(date '+%Y_%m_%d %H:%M:%S')"'''
    159. }
    160. }
    161. }
    162. stage('test部署') {
    163. when {
    164. branch 'test*'
    165. }
    166. steps {
    167. sh 'scp $AppName/target/$AppName.jar root@test-$AppHostName:/home/admin/'
    168. sh 'ssh root@test-$AppHostName "chown admin:admin /home/admin/*.jar "'
    169. sh 'scp $PersistName/target/$PersistName.jar root@test-$PersistHostName:/home/admin/'
    170. sh 'ssh root@test-$PersistHostName "chown admin:admin /home/admin/*.jar "'
    171. sh 'scp $DidiName/target/$DidiName.jar root@test-$DidiHostName:/home/admin/'
    172. sh 'ssh root@test-$DidiHostName "chown admin:admin /home/admin/*.jar "'
    173. }
    174. }
    175. stage('test启动服务') {
    176. when {
    177. branch 'test*'
    178. }
    179. steps {
    180. sh '''ssh root@test-$AppHostName "su - admin -c 'nohup java -jar $AppName.jar >> ./logs/$AppName.log &' "'''
    181. sh '''ssh root@test-$PersistHostName "su - admin -c 'nohup java -jar $PersistName.jar >> ./logs/$PersistName.log &' "'''
    182. sh '''ssh root@test-$DidiHostName "su - admin -c 'nohup java -jar $DidiName.jar >> ./logs/$DidiName.log &' "'''
    183. sh 'sleep 130'
    184. sh '''echo 结束 date "+%Y_%m_%d %H:%M:%S" '''
    185. }
    186. }
    187. stage('test健康检查') {
    188. when {
    189. branch 'test*'
    190. }
    191. steps {
    192. sh ' curl -X GET http://test-$AppHostName:$Port/health '
    193. sh ' curl -X GET http://test-$PersistName:$PersistPort/health '
    194. sh ' curl -X GET http://test-$DidiHostName:$PersistPort/health '
    195. }
    196. }
    197. stage('release构建') {
    198. when {
    199. branch 'release*'
    200. }
    201. steps {
    202. echo env.BRANCH_NAME
    203. sh 'mvn -DskipTests=true clean install -T 5 -P product'
    204. //sh 'mvn -DskipTests=true clean install -T 5 -P product,control'
    205. //sh 'mkdir ~/release'
    206. sh 'cp $AppName/target/$AppName.jar ~/release/release-$AppName.jar'
    207. sh 'cp $PersistName/target/$PersistName.jar ~/release/release-$PersistName.jar'
    208. sh 'cp $DidiName/target/$DidiName.jar ~/release/release-$DidiName.jar'
    209. }
    210. }
    211. }
    212. }

         

  • 相关阅读:
    Stata制作限制立方样条(RCS)(2)
    【21天学习经典算法】冒泡排序(附Python完整代码)
    图--深度优先搜索
    【LeetCode】35. 搜索插入位置
    Spring Aop原理解析和使用示例
    AVL双旋转思路分析与图解
    人机中的事实与价值时空、排序
    《实战》提示框
    出差学小白知识No5:|Ubuntu上关联GitLab账号并下载项目(ssh key配置)
    网络安全风险与防范方法
  • 原文地址:https://blog.csdn.net/JustDI0209/article/details/83115953