下载jenkins的war包,启动jenkisn
nohup java -jar jenkins.war --httpPort=8091 > jenkins.log 2>&1 &
docker安装gitlab
默认情况下,Omnibus GitLab 会自动为初始管理员用户账号 (
root
) 生成密码,并将其存储到/etc/gitlab/initial_root_password
至少 24 小时
mkdir /home/ec2-user/gitlab
export GITLAB_HOME=/home/ec2-user/gitlab
sudo docker run --detach \
--hostname gitlab.com \
--publish 8443:443 --publish 8092:80 --publish 8022:22 \
--name gitlab \
--restart always \
--volume $GITLAB_HOME/config:/etc/gitlab \
--volume $GITLAB_HOME/logs:/var/log/gitlab \
--volume $GITLAB_HOME/data:/var/opt/gitlab \
--shm-size 256m \
gitlab/gitlab-ee:latest
初始化过程可能需要很长时间
sudo docker logs -f gitlab
获取密码
sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
TJQ5Bx7yl8a+/JQlhe33hZgrfig+PTUIYaIzjapJ2HA=
使用idea的springboot initializer创建一个sprintboot项目,https://cloud.tencent.com/developer/article/1594258
创建简单的restapi接口,日后逐步完善
package com.weiz.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "Hello Spring Boot!";
}
}
启动项目
创建完毕之后有详细说明,clone或者加入现有仓库,这里要注意如果修改端口也要添加,例如我是8092
cd existing_repo
git remote add origin http://gitlab.com:8092/root/java-project.git
git branch -M main
git push -uf origin main
在jenkins中创建maven项目,主要配置项目为gitlab仓库名称和maven路径
在jenkisn机器上安装maven
安装 publish ssh插件,通过ssh连接进行发布,在系统配置下添加SSH Servers作为部署的目标
在Pre Steps阶段自定义执行命令,例如删除之前的部署包
在jenkins的maven项目中配置Post Steps为**Send files or execute commands over SSH**[ ](http://52.81.54.188:8091/job/first/configure#)
点击立即构建可以看到jar包发到目标主机,并执行相应shell命令
查看部署成功
$ jps
13155 Jps
12772 TestSpringbootCICD-0.0.1-SNAPSHOT.jar
$ curl 127.0.0.1:8080/hello
Hello Spring Boot!
jenkins可以配置集群,master通过向节点发送agent配置,将构建任务转移到子节点上
创建节点
节点加入日志
加入成功
查看目录
$ tree remoting
remoting
├── jarCache
│ ├── 03
│ │ └── E3B418DE52CE1D126971EC175B672C.jar
│ ├── 08
│ │ └── 82AD55682C95773C875C27C9159397.jar
│ ├── 0F
│ │ └── 3B4B41FA3E95DE9A5D0B01F64C9835.jar
│ ├── 28
│ │ └── B0BD31A429FA04C24972CEC2D8FDDC.jar
│ ├── 52
│ │ └── 0A72C518A90310D212D3EFACFEDA8D.jar
│ ├── 66
│ │ └── 6F8BD601D4FB03360D91033FA9F010.jar
│ ├── B3
│ │ └── 0F63788978A11629EABC8579E5C70F.jar
│ ├── DD
│ │ └── CA0DD5CB00EB03D2A10BDCB467FE34.jar
│ └── FD
│ └── C3016DEDE06111EBD459F70877F57B.jar
└── logs
├── remoting.log.0
└── remoting.log.0.lck
之后创建的构建,将按照配置选择启动在子节点上
示例pipeline脚本,不是很好写一般也没必要,可以使用流水线片段生成器
pipeline {
agent any
tools {
maven "M3"
}
stages {
stage('Build') {
steps {
git 'https://github.com/jglick/simple-maven-project-with-tests.git'
sh "mvn -Dmaven.test.failure.ignore=true clean package"
}
、
post {
success {
junit '**/target/surefire-reports/TEST-*.xml'
archiveArtifacts 'target/*.jar'
}
}
}
}
}
生成片段
这里使用publish over ssh,可选的很多
生成的片段如下,还是比较复杂,按照需要回填到pipeline中即可
sshPublisher(publishers: [sshPublisherDesc(configName: '172.31.26.66', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'nohup jar -jar springboot.jar 2>&1 &', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/home/ec2-user/', remoteDirectorySDF: false, removePrefix: '/home/ec2-user/first', sourceFiles: '**/*.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])