aws ec2 配置jenkins和gitlab

环境搭建

下载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!";
    }
}

启动项目

aws ec2 配置jenkins和gitlab_第1张图片
在gitlab中创建项目

aws ec2 配置jenkins和gitlab_第2张图片

创建完毕之后有详细说明,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路径

aws ec2 配置jenkins和gitlab_第3张图片

在jenkisn机器上安装maven

aws ec2 配置jenkins和gitlab_第4张图片

安装 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命令

aws ec2 配置jenkins和gitlab_第5张图片

查看部署成功

$ jps
13155 Jps
12772 TestSpringbootCICD-0.0.1-SNAPSHOT.jar
$ curl 127.0.0.1:8080/hello
Hello Spring Boot!

集群和并发构建

jenkins可以配置集群,master通过向节点发送agent配置,将构建任务转移到子节点上

创建节点

aws ec2 配置jenkins和gitlab_第6张图片

配置节点,这里使用ssh的方式
aws ec2 配置jenkins和gitlab_第7张图片

节点加入日志

aws ec2 配置jenkins和gitlab_第8张图片

加入成功

aws ec2 配置jenkins和gitlab_第9张图片

查看目录

$ 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

之后创建的构建,将按照配置选择启动在子节点上

创建简单流水线

aws ec2 配置jenkins和gitlab_第10张图片

示例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'
                }
            }
        }
    }
}

生成片段

aws ec2 配置jenkins和gitlab_第11张图片

这里使用publish over ssh,可选的很多

aws ec2 配置jenkins和gitlab_第12张图片

生成的片段如下,还是比较复杂,按照需要回填到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)])

你可能感兴趣的:(AWS,CICD,jenkins,aws,gitlab)