heidsoft / heidsoft-java

java learn
0 stars 2 forks source link

github-action #16

Open heidsoft opened 4 months ago

heidsoft commented 4 months ago

jobs: build: runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2

- name: Set up JDK 11
  uses: actions/setup-java@v1
  with:
    java-version: 11

- name: Build with Maven
  run: mvn -B package --file pom.xml -DskipTests
heidsoft commented 4 months ago

在 GitHub Actions 工作流中使用 SonarQube, JFrog Artifactory, ArgoCD, 和 JFrog Xray 需要您为每个工具设置特定的步骤。下面是一个基本的工作流程例子,展示了如何将这些工具串联起来。

首先,确保你已经在项目和 GitHub Secrets 中设置了所有必要的凭证和配置。

name: CI/CD Pipeline

on: [push]

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2

    # Set up JDK for Java project
    - name: Set up JDK
      uses: actions/setup-java@v1
      with:
        java-version: '11'
        distribution: 'adopt'

    # Build with Maven and skip tests for demo purposes
    - name: Build with Maven
      run: mvn clean package -DskipTests

    # SonarQube analysis
    - name: SonarQube Scan
      uses: SonarSource/sonarqube-scan-action@v1.0.0
      with:
        args: >
          -Dsonar.host.url=${{ secrets.SONAR_HOST_URL }}
          -Dsonar.login=${{ secrets.SONAR_LOGIN }}
          -Dsonar.projectKey=<your-project-key>

    # Upload to JFrog Artifactory
    - name: Upload Artifacts to Artifactory
      uses: jfrog/setup-jfrog-cli@v1
      with:
        version: '1.45.0'
      env:
        JF_ARTIFACTORY_URL: ${{ secrets.ARTIFACTORY_URL }}
        JF_USER: ${{ secrets.ARTIFACTORY_USERNAME }}
        JF_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }}
      run: |
        jfrog rt u target/*.jar <your-repo-key>/

    # Scan with JFrog Xray
    - name: Scan Artifacts with JFrog Xray
      run: |
        # You will need to use the JFrog CLI or API to trigger a scan with Xray
        # Please refer to the JFrog Xray documentation for specific commands and setup
        jfrog rt bs <your-build-name> <your-build-number>
        jfrog rt build-scan <your-build-name> <your-build-number>

    # Deploy with ArgoCD
    - name: Deploy with ArgoCD
      uses: argoproj/argo-cd-action@v1.1
      with:
        command: sync
        app_name: <your-argo-app-name>
        argocd_auth_token: ${{ secrets.ARGOCD_AUTH_TOKEN }}
        argocd_server: <your-argocd-server>

请注意以下事项:

确保替换 <placeholders> 为你的实际配置值。每个工具的使用可能根据它们的具体配置有所不同,因此请确保查阅各自的文档来获得准确的配置指南。

heidsoft commented 4 months ago

如果你正在使用私有部署的 SonarQube, JFrog Artifactory, ArgoCD, 和 JFrog Xray,这意味着这些工具都部署在你的内部网络中,通常你需要确保以下几点来改进 GitHub Actions 工作流的配置:

  1. 安全访问:确保 GitHub Actions 有权访问你的内部网络中的这些服务。这可能需要配置 VPN、代理或者使用自托管的 GitHub Actions Runners。

  2. 设置 Secrets:就像使用公共云服务一样,你需要在 GitHub 仓库中设置相应的 Secrets 来存储访问私有部署服务的凭据。

  3. 更新服务的 URL:在 GitHub Actions 工作流中使用的所有服务 URL 必须更新为指向你的私有部署的相应服务。

  4. 网络策略:确保你的网络策略允许 GitHub Actions Runners 访问这些服务,并且端口不被防火墙阻塞。

  5. 使用自托管 Runner:在某些情况下,为了确保 GitHub Actions 可以访问私有网络中的资源,你可能需要设置自托管 Runner。

以下是一个更新后的工作流配置示例,假设你已经设置了所有必要的 Secrets 和网络访问:

name: CI/CD Pipeline

on: [push]

jobs:
  build-and-deploy:
    runs-on: self-hosted # 使用自托管 Runner
    steps:
    - uses: actions/checkout@v2

    # ... 省略了其他步骤 ...

    # SonarQube analysis (私有部署)
    - name: SonarQube Scan
      uses: SonarSource/sonarqube-scan-action@v1.0.0
      with:
        args: >
          -Dsonar.host.url=${{ secrets.SONAR_HOST_URL }} # 私有部署的 SonarQube URL
          -Dsonar.login=${{ secrets.SONAR_LOGIN }}
          -Dsonar.projectKey=<your-project-key>

    # Upload to JFrog Artifactory (私有部署)
    - name: Upload Artifacts to Artifactory
      uses: jfrog/setup-jfrog-cli@v1
      env:
        JF_ARTIFACTORY_URL: ${{ secrets.ARTIFACTORY_URL }} # 私有部署的 Artifactory URL
        JF_USER: ${{ secrets.ARTIFACTORY_USERNAME }}
        JF_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }}
      run: |
        jfrog rt u target/*.jar <your-repo-key>/

    # Scan with JFrog Xray (私有部署)
    - name: Scan Artifacts with JFrog Xray
      run: |
        jfrog rt bs <your-build-name> <your-build-number>
        jfrog rt build-scan <your-build-name> <your-build-number>

    # Deploy with ArgoCD (私有部署)
    - name: Deploy with ArgoCD
      uses: argoproj/argo-cd-action@v1.1
      with:
        command: sync
        app_name: <your-argo-app-name>
        argocd_auth_token: ${{ secrets.ARGOCD_AUTH_TOKEN }} # ArgoCD 的 token
        argocd_server: <your-argocd-server> # 私有部署的 ArgoCD 服务器

# ... 省略了其他内容 ...

请确保所有的私有 URL 和 Secrets 都已经正确设置,并且网络策略允许访问。如果你的自托管 Runner 需要特殊的配置来访问这些服务(例如代理设置),你可能还需要在 Runner 的配置中或者直接在工作流中设置这些。

heidsoft commented 4 months ago

GitHub Actions 允许您使用环境(Environments)来控制工作流中的部署和其他操作。环境可以有自己的保护规则(例如,需要手动批准部署),以及与之关联的一组环境变量和机密(Secrets)。

要在 GitHub Actions 工作流中使用环境,请按照以下步骤操作:

设置环境

  1. 在 GitHub 仓库中,点击仓库名称下的 "Settings"。
  2. 在左侧边栏中,点击 "Environments"。
  3. 点击 "New environment" 按钮,输入环境名称(例如,productionstaging),然后点击 "Configure environment"。
  4. 在环境设置中,您可以添加环境机密、配置保护规则等。

在工作流中使用环境

在你的 .github/workflows/<workflow>.yml 工作流文件中,你可以指定环境,如下所示:

jobs:
  deploy:
    runs-on: ubuntu-latest
    environment:
      name: production # 这里是你在仓库设置中创建的环境名称
      url: ${{ steps.deploy.outputs.website_url }} # 可选,如果您的环境有一个URL
    steps:
    - name: Checkout code
      uses: actions/checkout@v2
    # ... 其他步骤 ...
    - name: Deploy to production
      run: ./deploy.sh
      # 在这里或其他步骤中使用 environment secrets
      env:
        SECRET_KEY: ${{ secrets.SECRET_KEY }}

使用 Environments Rulesets(环境规则集)

环境规则集是保护规则,您可以在环境设置中配置它们。例如:

使用 GitHub Codespaces

GitHub Codespaces 是一个完全配置的开发环境,您可以在浏览器或 Visual Studio Code 中使用它来写代码、调试、运行测试和提交更改。

要使用 GitHub Codespaces,您需要:

  1. 在 GitHub 仓库页面,点击 "Code" 按钮旁边的 "Codespaces" 选项。
  2. 点击 "New codespace" 按钮来创建一个新的 Codespace。如果您有特定的配置需求,您可以在仓库中添加一个 .devcontainer 目录,其中包含配置 Codespace 所需的 devcontainer.json 文件和 Dockerfile。
  3. 一旦 Codespace 创建完成,您就可以在浏览器或 VS Code 中开始使用它了。

请注意,GitHub Codespaces 目前可能不对所有用户开放或可能需要特定的计划权限。

总之,使用 GitHub Environments,您可以在工作流中为不同的部署阶段设置专门的环境,而 GitHub Codespaces 则提供了一个云端的开发环境,可用于开发和测试应用。

heidsoft commented 4 months ago

Argo CD是一个声明式的、GitOps连续交付工具,用于在Kubernetes集群中自动部署应用程序。要使用Argo CD部署应用程序,你需要遵循以下步骤:

  1. 安装Argo CD到你的Kubernetes集群。
  2. 创建一个Git仓库,用于存放你的Kubernetes部署文件(比如YAML文件)。
  3. 在Argo CD中注册你的应用程序,并指定Git仓库的路径。
  4. Argo CD会自动同步Git仓库中的变更,并将它们部署到你的Kubernetes集群中。

这里是一个简单的例子,展示如何使用Argo CD部署一个名为example-app的简单Nginx应用程序。

步骤 1: 安装Argo CD

首先,你需要在你的Kubernetes集群上安装Argo CD。你可以使用以下命令来安装Argo CD:

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

步骤 2: 创建Git仓库

在你的Git仓库中,创建一个名为example-app的目录,并在其中创建一个名为deployment.yaml的文件,内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: example-app
  namespace: default
spec:
  selector:
    matchLabels:
      app: example-app
  replicas: 2
  template:
    metadata:
      labels:
        app: example-app
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

同时,创建一个名为service.yaml的文件来定义一个Service资源,以便访问Nginx:

apiVersion: v1
kind: Service
metadata:
  name: example-app-service
  namespace: default
spec:
  selector:
    app: example-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer

提交这些文件到你的Git仓库。

步骤 3: 在Argo CD中注册应用程序

接下来,你需要在Argo CD中注册你的应用程序。这可以通过命令行或Argo CD的Web UI完成。

如果你使用命令行,你可以使用argocd CLI工具来添加应用程序:

argocd app create example-app \
  --repo https://github.com/<username>/<repository>.git \
  --path example-app \
  --dest-server https://kubernetes.default.svc \
  --dest-namespace default

请确保将<username><repository>替换为你自己的Git仓库信息。

步骤 4: 同步并部署应用程序

一旦应用程序在Argo CD中注册,Argo CD会监视Git仓库的变更。当你推送更改到仓库时,Argo CD会自动同步这些变更并将更新部署到Kubernetes集群中。

你也可以手动触发同步过程:

argocd app sync example-app

步骤 5: 访问你的应用程序

如果你创建了一个Service资源,并将其类型设置为LoadBalancer,你应该能够通过LoadBalancer分配的外部IP访问你的应用程序。使用以下命令查找外部IP:

kubectl get svc example-app-service

现在你应该可以在浏览器中通过这个IP地址访问你的Nginx应用程序了。

heidsoft commented 4 months ago

Argo CD是一个声明式的、GitOps连续交付工具,用于在Kubernetes集群中自动部署应用程序。要使用Argo CD部署应用程序,你需要遵循以下步骤:

  1. 安装Argo CD到你的Kubernetes集群。
  2. 创建一个Git仓库,用于存放你的Kubernetes部署文件(比如YAML文件)。
  3. 在Argo CD中注册你的应用程序,并指定Git仓库的路径。
  4. Argo CD会自动同步Git仓库中的变更,并将它们部署到你的Kubernetes集群中。

这里是一个简单的例子,展示如何使用Argo CD部署一个名为example-app的简单Nginx应用程序。

步骤 1: 安装Argo CD

首先,你需要在你的Kubernetes集群上安装Argo CD。你可以使用以下命令来安装Argo CD:

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

步骤 2: 创建Git仓库

在你的Git仓库中,创建一个名为example-app的目录,并在其中创建一个名为deployment.yaml的文件,内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: example-app
  namespace: default
spec:
  selector:
    matchLabels:
      app: example-app
  replicas: 2
  template:
    metadata:
      labels:
        app: example-app
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

同时,创建一个名为service.yaml的文件来定义一个Service资源,以便访问Nginx:

apiVersion: v1
kind: Service
metadata:
  name: example-app-service
  namespace: default
spec:
  selector:
    app: example-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer

提交这些文件到你的Git仓库。

步骤 3: 在Argo CD中注册应用程序

接下来,你需要在Argo CD中注册你的应用程序。这可以通过命令行或Argo CD的Web UI完成。

如果你使用命令行,你可以使用argocd CLI工具来添加应用程序:

argocd app create example-app \
  --repo https://github.com/<username>/<repository>.git \
  --path example-app \
  --dest-server https://kubernetes.default.svc \
  --dest-namespace default

请确保将<username><repository>替换为你自己的Git仓库信息。

步骤 4: 同步并部署应用程序

一旦应用程序在Argo CD中注册,Argo CD会监视Git仓库的变更。当你推送更改到仓库时,Argo CD会自动同步这些变更并将更新部署到Kubernetes集群中。

你也可以手动触发同步过程:

argocd app sync example-app

步骤 5: 访问你的应用程序

如果你创建了一个Service资源,并将其类型设置为LoadBalancer,你应该能够通过LoadBalancer分配的外部IP访问你的应用程序。使用以下命令查找外部IP:

kubectl get svc example-app-service

现在你应该可以在浏览器中通过这个IP地址访问你的Nginx应用程序了。

heidsoft commented 4 months ago

ArgoCD 是一个声明式的 GitOps 持续部署工具,它使用 Git 仓库作为应用程序配置的单一来源。ArgoCD 的最佳实践主要围绕以下几个方面:

1. 遵循 GitOps 原则

2. 使用声明式配置

3. 分离环境

4. 保密数据管理

5. 应用分组

1. 分离配置与代码

2. 使用声明式配置

3. 遵循 GitOps 原则

4. 环境隔离

5. 安全性

6. 自动化部署流程

7. 监控与日志

8. 回滚策略

9. 文档化

10. 持续学习和改进

示例 ArgoCD 应用定义

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-application
spec:
  project: default
  source:
    repoURL: https://git.example.com/configs.git
    path: my-application/overlays/production
    targetRevision: HEAD
  destination:
    server: https://kubernetes.default.svc
    namespace: my-application-ns
  syncPolicy:
    automated:
      prune: true # 删除不在 Git 中的资源
      selfHeal: true # 自动修复偏离定义的资源

通过遵循这些最佳实践,你可以确保你的 ArgoCD 部署是安全、高效且可持续的。确保周期性地审查你的流程和实践,以适应不断变化的需求和技术环境。

heidsoft commented 4 months ago

https://jfrog.com/help/r/jfrog-security-documentation/run-the-jfrog-cli-command-for-dependency-scans https://jfrog.com/help/r/jfrog-security-documentation/view-xray-dependency-scan-results https://github.com/jfrog/frogbot/actions/runs/9697161127/job/26760661163 https://github.com/judebantony/cicd-github-action-example/tree/main?tab=readme-ov-file