redmine 实现钉钉推送信息

redmine 实现钉钉推送信息

公司开始用钉钉了,想把redmine项目管理退送到钉钉里,
不想专门写脚本拉token调api发信息,
想使用的钉钉自定义机器人,百度了下还真有人已经做好了

redmine2.4 -> 3.x 插件 https://github.com/phanan/redmine_webhook

redmine4.x 插件 https://github.com/suer/redmine_webhook
下好插件,索性写几个脚本,省的每次打命令
插件安装

#!/bin/bash
echo "bundle install"
bundle install
echo "install"
rake redmine:plugins:migrate RAILS_ENV=production

启动

#!/bin/bash

echo "start redmine"
bundle exec rails server webrick -e production -d

关闭

echo "find redmine running pross:         "
pros=`ps -ef |grep '/ruby bin/rails server webrick -e production -d'|grep -v grep`
echo $pros
prosid=`ps -ef |grep '/ruby bin/rails server webrick -e production -d'|grep -v grep|awk -F " " '{print $2}'`
echo "3s后关闭" $prosid
sleep 3
kill -9 $prosid

装好插件,启动
在这里插入图片描述
随便test了个一项目,结果居然没报警
发现插件目录lib/redmine_webhook/webhook_listener.rb
里的post方法存在问题,可能是作者留的扩展点,方便用到其他地方

post 的json是
{
	"payload": {
		"action": "updated",
		"issue": {
			"id": 11,
			"subject": "test",
			"description": "test.x.x.x.x.dingtalk",
			"created_on": "2020-03-05T07:13:40.000Z",
			"updated_on": "2020-03-10T07:45:37.000Z",
			"closed_on": null,
			"root_id": 11,
			"parent_id": null,
			"done_ratio": 100,
			"start_date": "2020-03-05",
			"due_date": "2020-03-06",
			"estimated_hours": 1.0,
			"is_private": false,
			"lock_version": 6,
			"custom_field_values": [],
			"project": {
				"id": 10,
				"identifier": "hx005",
				"name": "开发与生产",
				"description": "这是一个演示demo",
				"created_on": "2020-03-04T09:48:06.000Z",
				"homepage": ""
			},
			"status": {
				"id": 1,
				"name": "新建"
			},
			"tracker": {
				"id": 18,
				"name": "15量产"
			},
			"priority": {
				"id": 2,
				"name": "普通"
			},
			"author": {
				"id": 106,
				"login": "tokyohuang123",
				"mail": "tokyohuang123@163.com",
				"firstname": "tokyohuang123",
				"lastname": "tokyohuang123",
				"identity_url": null,
				"icon_url": "https://www.gravatar.com/avatar/80588af530c40b28a84f123f1842548b?rating=PG&size=24"
			},
			"assignee": {
				"id": 106,
				"login": "tokyohuang123",
				"mail": "tokyohuang123@163.com",
				"firstname": "tokyohuang123",
				"lastname": "tokyohuang123",
				"identity_url": null,
				"icon_url": "https://www.gravatar.com/avatar/80588af530c40b28a84f123f1842548b?rating=PG&size=24"
			},
			"watchers": [{
				"id": 106,
				"login": "tokyohuang123",
				"mail": "tokyohuang123@163.com",
				"firstname": "tokyohuang123",
				"lastname": "tokyohuang123",
				"identity_url": null,
				"icon_url": "https://www.gravatar.com/avatar/80588af530c40b28a84f123f1842548b?rating=PG&size=24"
			}]
		},
		"journal": {
			"id": 23,
			"notes": "",
			"created_on": "2020-03-10T07:45:37.000Z",
			"private_notes": false,
			"author": {
				"id": 106,
				"login": "tokyohuang123",
				"mail": "tokyohuang123@163.com",
				"firstname": "tokyohuang123",
				"lastname": "tokyohuang123",
				"identity_url": null,
				"icon_url": "https://www.gravatar.com/avatar/80588af530c40b28a84f123f1842548b?rating=PG&size=24"
			},
			"details": [{
				"id": 34,
				"value": "test.x.x.x.x.dingtalk",
				"old_value": "test",
				"prop_key": "description",
				"property": "attr"
			}, {
				"id": 35,
				"value": "2",
				"old_value": "1",
				"prop_key": "priority_id",
				"property": "attr"
			}]
		},
		"url": "http://x.x.x.x:30002/issues/11"
	}
}

而钉钉机器人的json格式要求

msgcont ={
    "msgtype"=> "text",
    "text"=> {
      "content"=>"#{content}"
    }
  }

所以这里body的内容需要改下

    def post(webhooks, request_body)
    Thread.start do
      webhooks.each do |webhook|
        begin
          Faraday.post do |req|
            req.url webhook.url
            req.headers['Content-Type'] = 'application/json'
            req.body = request_body
             end
        rescue => e
          Rails.logger.error e
        end
      end
    end
  end

为了方便测试 先用text,后面再用MD

    def post(webhooks, request_body)
      Thread.start do
        webhooks.each do |webhook|
          begin
            Faraday.post do |req|
              req.url webhook.url
              req.headers['Content-Type'] = 'application/json'
              req.body = {
                          "msgtype"=> "text",
                          "text"=> {
                          "content"=>"#{request_body}"
                             }
                          }.to_json           
             
            end
          rescue => e
            Rails.logger.error e
          end
        end
      end
    end
    ```
    马上试了下 成了,
    不懂作者为啥在这里留个坑,国外也没用钉钉啊
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以使用 Redmine Java API 来编写一个 Java 脚本来创建 Redmine 项目。下面是一个简单的示例: ```java import com.taskadapter.redmineapi.RedmineException; import com.taskadapter.redmineapi.RedmineManager; import com.taskadapter.redmineapi.bean.Project; public class RedmineProjectCreator { public static void main(String[] args) throws RedmineException { // 创建 RedmineManager 对象 RedmineManager redmineManager = new RedmineManager("http://redmine.example.com", "your_api_key"); // 创建一个新项目对象 Project project = new Project(); project.setName("Project Name"); project.setIdentifier("project-identifier"); project.setDescription("Project Description"); project.setHomepage("http://project.example.com"); // 创建项目 Project createdProject = redmineManager.getProjectManager().createProject(project); // 输出创建的项目信息 System.out.println("Created project with ID: " + createdProject.getId()); System.out.println("Project name: " + createdProject.getName()); System.out.println("Project identifier: " + createdProject.getIdentifier()); System.out.println("Project description: " + createdProject.getDescription()); System.out.println("Project homepage: " + createdProject.getHomepage()); } } ``` 在这个示例中,我们使用 Redmine Java API 中的 `RedmineManager` 类来连接 Redmine 服务器,并使用 `Project` 类来表示要创建的项目。创建项目时,我们需要设置项目的名称、标识符、描述和主页等信息,并使用 `ProjectManager` 类的 `createProject()` 方法来创建项目。最后,我们输出创建的项目信息。 需要注意的是,在使用 Redmine Java API 之前,你需要先下载并导入 API 的 jar 包,具体方法可以参考 API 的官方文档。此外,还需要在 Redmine 中生成一个 API 密钥,用于连接 Redmine 服务器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值