diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index e69de29..9ee893e 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -0,0 +1,170 @@ +name: Build Push and Deploy Image + +on: + push: + #tag 触发 + tags: + - 'v*' + # 分支触发 + # branches: + # - main + workflow_dispatch: #手动构建h + +#设置全局环境变量 +env: + PATH: /opt/node/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin + REGISTRY: ${{ secrets.DOCKER_REGISTRY }} + IMAGE_NAMESPACE: bamanker # todo 可以通过读取pom文件获取下面这些属性值 + IMAGE_NAME: dailylove + APP_NAME: daily-love + +# 构建 Job +jobs: + build: + runs-on: ubuntu-node22 # 如果host构建:linux_amd64 + # container: + # image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/catthehacker/ubuntu:act-latest + steps: + + - name: Print system info 1 + run: echo " The job was automatically triggered by a ${{ gitea.event_name }} event." + + - name: Print system info 2 + run: echo " This job is now running on a ${{ runner.os }} server hosted by Gitea!" + + - name: Print system info 3 + run: echo " The name of your branch is ${{ gitea.ref }} and your repository is ${{ gitea.repository }}." + + - name: Print env + run: env && blkid + + - name: Install dependencies + run: | + apt-get update && + apt-get install -y gettext && + apt-get install -y maven && + apt-get install -y sudo && + apt-get install -y iptables + + - name: Set up Docker + uses: http://139.9.216.111:3000/bamanker/setup-docker-action@v4.6.0 + with: + # 版本大于28会有兼容性问题 + version: type=archive,channel=stable,version=v27.4.0 + daemon-config: | + { + "registry-mirrors":["https://docker.1ms.run"], + "dns": ["8.8.8.8", "114.114.114.114"] + } + - name: Generate maven config + uses: http://139.9.216.111:3000/bamanker/maven-settings-action@v3.1.0 + with: + mirrors: '[{"id": "alimaven", "name": "aliyun maven", "mirrorOf": "central", "url": "http://maven.aliyun.com/nexus/content/groups/public/"}]' + + # - uses: http://localhost:3000/bamanker/setup-node@v6 + # with: + # node-version: 24 + # cache: 'npm' + # - run: node -v + # 下载仓库源码,依赖node环境,因此构建服务器本地需要下载安装node并设置环境变量 + + - name: Checkout repository code + #使用自定义仓库action + uses: http://139.9.216.111:3000/bamanker/checkout@v4 + + # 获取 TAG 并设置为环境变量 + - name: Get version + id: get_version + # e.g. refs/tags/v1.0.0 + run: | + echo "APP_TAG=${GITHUB_REF/refs\/tags\/v}" >> $GITHUB_ENV + + # 检查 TAG 并传参 + - name: Set envVar + id: set_envar + run: | + echo "The app version is $APP_TAG" && echo "tag=$APP_TAG" >> $GITHUB_OUTPUT && + echo "now workspace: ${{ github.workspace }}" + + # 为其他配置文件注入环境变量 + - name: Inject envVar + run: | + envsubst < ./deployment-temp.yml > ./deployment.yml && + cat ./deployment.yml + + # 安装java环境 + - name: Set up Java + uses: http://139.9.216.111:3000/bamanker/setup-graalvm@v1 + with: + distribution: 'graalvm' + java-version: '25.0.1' + cache: 'maven' + # maven 构建 + - name: Build with Maven + run: mvn clean native:compile -DskipTests -Pnative + + # 登录镜像仓库,方便后续上传镜像 + - name: Login to Docker Registry + uses: http://139.9.216.111:3000/bamanker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_PASSWORD }} + + # # 获取时间戳 + # - name: Get datetime + # id: datetime + # run: | + # echo "datetime=$(date '+%Y-%m-%d-%H-%M-%S')" >> $GITHUB_OUTPUT + + # 构建并上传镜像 + - name: Build and push Docker image + # uses: http://139.9.216.111:3000/bamanker/build-push-action@v4 + # 获取上一步截取到的版本号,既 1.0.0 + #只能这样接收 + env: + TAG: ${{ steps.set_envar.outputs.tag }} + run: | + ls && + docker build --file Dockerfile --tag ${{ env.REGISTRY }}/${{ env.IMAGE_NAMESPACE }}/${{ env.IMAGE_NAME }}:${{ env.TAG }} . && + docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAMESPACE }}/${{ env.IMAGE_NAME }}:${{ env.TAG }} + + # uses: http://139.9.216.111:3000/bamanker/docker-build-push@v5 + # with: + # context: . + ## platforms: linux/amd64 + # file: Dockerfile + # push: true + # tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAMESPACE }}/${{ env.IMAGE_NAME }}:${{ env.TAG }} + + #发布到 k8s + #安装 kubectl + - name: Setup kubectl + run: | + curl -LO "https://dl.k8s.io/release/v1.33.0/bin/linux/amd64/kubectl" && + chmod +x kubectl && + mv kubectl /usr/local/bin/ + + - name: Configure kubeconfig + # 假设您的 KUBE_CONFIG 秘密是 Base64 编码的 kubeconfig 文件内容 + run: | + # 1. 创建 ~/.kube 目录 + mkdir -p $HOME/.kube + + # 2. 将 Base64 编码的 KUBE_CONFIG 秘密解码并写入默认配置文件 + echo "${{ secrets.KUBE_CONFIG }}" | base64 -d > $HOME/.kube/config + + # 3. 确保 kubectl 知道配置文件的位置 (可选, 但安全) + echo "KUBECONFIG=$HOME/.kube/config" >> $GITHUB_ENV + + - name: Deploy with kubectl + run: | + kubectl apply -f ./deployment.yml + + - name: k8s Check Pods Health + run: | + kubectl get pod -n default -l app=${{ env.APP_NAME }} + + - name: k8s Update Deployment + run: | + kubectl rollout restart deployment ${{ env.APP_NAME }} diff --git a/Dockerfile b/Dockerfile index d87c404..a00ec49 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,5 @@ -FROM ubuntu:jammy-20231004 +FROM swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/ubuntu:jammy MAINTAINER bamanker -COPY target/dailylove /home/dailylove/app +COPY target/dailylove /root/dailylove/ EXPOSE 13145 -WORKDIR /home/dailylove/out -ENTRYPOINT /home/dailylove/app -XX:StartFlightRecording='filename=recording.jfr,dumponexit=true,duration=10s' \ No newline at end of file +CMD /root/dailylove/dailylove -XX:StartFlightRecording='filename=recording.jfr,dumponexit=true,duration=10s' \ No newline at end of file diff --git a/deploy.yaml b/deployment-temp.yaml similarity index 55% rename from deploy.yaml rename to deployment-temp.yaml index 6203aed..f7dcc22 100644 --- a/deploy.yaml +++ b/deployment-temp.yaml @@ -3,12 +3,13 @@ kind: Deployment metadata: labels: app: $APP_NAME - version: $TAG + version: $APP_TAG name: $APP_NAME namespace: dl-proj #一定要写名称空间 spec: progressDeadlineSeconds: 600 replicas: 1 + revisionHistoryLimit: 2 selector: matchLabels: app: $APP_NAME @@ -21,21 +22,23 @@ spec: metadata: labels: app: $APP_NAME - version: $TAG + version: $APP_TAG spec: imagePullSecrets: - - name: aliyun-docker-hub #提前在项目下配置访问阿里云的账号密码 + - name: dockerhub-id #提前在项目下配置访问阿里云的账号密码 containers: - - image: $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:$TAG - readinessProbe: + - image: $REGISTRY/$IMAGE_NAMESPACE/$IMAGE_NAME:$APP_TAG + name: $APP_NAME + imagePullPolicy: Always + livenessProbe: # 存活探针:失败意味着应用彻底挂了,需要重启来恢复 httpGet: path: /test - port: 13145 - timeoutSeconds: 10 - failureThreshold: 30 - periodSeconds: 5 - imagePullPolicy: Always - name: app + port: 9090 + initialDelaySeconds: 10 # 延迟xx秒开始执行 + periodSeconds: 15 # 每隔15秒执行一次 + timeoutSeconds: 10 # 10秒未返回结果则超时 + failureThreshold: 10 # 探测失败后的重试次数,当达到这个次数后就判定结果为失败 + # successThreshold: 5 ports: - containerPort: 13145 protocol: TCP @@ -43,14 +46,10 @@ spec: limits: cpu: 99m memory: 65Mi - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File env: - name: TZ value: "Asia/Shanghai" - dnsPolicy: ClusterFirst - restartPolicy: Always - terminationGracePeriodSeconds: 30 + --- apiVersion: v1 kind: Service @@ -60,20 +59,12 @@ metadata: name: $APP_NAME namespace: dl-proj spec: + type: NodePort + externalTrafficPolicy: Local ports: - name: http - port: 13145 protocol: TCP - targetPort: 13145 + port: 13145 + nodePort: 13145 selector: app: $APP_NAME - sessionAffinity: None - type: ClusterIP ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: $APP_NAME # ServiceAccount的名字 - namespace: dl-proj # serviceaccount的namespace - labels: - app: $APP_NAME #ServiceAccount的标签 diff --git a/src/main/java/com/bamanker/dailylove/controller/TestController.java b/src/main/java/com/bamanker/dailylove/controller/TestController.java index 3c098c4..3af08e5 100644 --- a/src/main/java/com/bamanker/dailylove/controller/TestController.java +++ b/src/main/java/com/bamanker/dailylove/controller/TestController.java @@ -10,9 +10,18 @@ import org.springframework.web.bind.annotation.RestController; @Slf4j @RestController public class TestController { + /** + * 处理GET请求的测试方法。 + * + * @return 返回一个字符串,内容为"test ok!!!!!!!!",用于验证功能的正常运行。 + */ @GetMapping("/test") public String test(){ return "test ok!!!!!!!!"; } + + + + } diff --git a/src/main/java/com/bamanker/dailylove/domain/DataItem.java b/src/main/java/com/bamanker/dailylove/domain/DataItem.java index d9b662f..85e7e95 100644 --- a/src/main/java/com/bamanker/dailylove/domain/DataItem.java +++ b/src/main/java/com/bamanker/dailylove/domain/DataItem.java @@ -4,6 +4,9 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +/** + * @author bamanker + */ @Data @AllArgsConstructor @NoArgsConstructor @@ -11,4 +14,8 @@ public class DataItem { private String value; private String color; + + + + } diff --git a/target/dailylove b/target/dailylove deleted file mode 100755 index cbf084e..0000000 Binary files a/target/dailylove and /dev/null differ